C#에서 Excel 파일을 읽는 것은 보고서, 데이터 가져오기, 자동화에서 흔한 작업입니다. Free Spire.XLS for .NET은 무료 커뮤니티 에디션으로, 컴퓨터에 Microsoft Excel을 설치하지 않고 Interop을 사용하지 않고도 Excel 통합 문서를 로드하고 데이터를 읽을 수 있습니다. 이 문서에서는 셀, 워크시트, 행을 읽고, 워크시트를 DataTable로 내보내고, 수식 결과를 처리하는 방법을 보여 줍니다.
빠른 시작: C#에서 Excel 파일 읽기
NuGet에서 Free Spire.XLS for .NET을 설치합니다. 터미널에서 다음 명령을 실행합니다:
dotnet add package FreeSpire.XLS
또는 NuGet 패키지 관리자 콘솔에서 다음 명령을 실행합니다:
Install-Package FreeSpire.XLS
또한 Free Spire.XLS for .NET을 다운로드하여 DLL을 수동으로 참조하거나 NuGet에서 패키지를 찾을 수 있습니다.
다음 예제에서는 Excel 파일을 로드하고 첫 번째 워크시트를 가져온 다음 셀 A1의 값을 출력합니다. input.xlsx를 파일의 전체 경로로 바꾸거나 파일이 프로그램의 현재 작업 디렉터리에 있는지 확인하세요.
using System;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
// Load an existing Excel file
workbook.LoadFromFile("input.xlsx");
// Get the first worksheet
Worksheet sheet = workbook.Worksheets[0];
// Read the value of cell A1 (row 1, column 1)
string value = sheet.Range[1, 1].Value;
Console.WriteLine("Cell A1: " + value);
}
finally
{
workbook.Dispose();
}
}
}
Workbook.LoadFromFile()는 파일을 메모리로 읽어 들입니다. Worksheets[0]은 첫 번째 워크시트를 반환하고, Range[1, 1].Value는 첫 번째 행과 첫 번째 열에 있는 셀의 텍스트 값을 반환합니다. finally 블록은 작업이 끝나면 통합 문서의 리소스를 해제합니다.

특정 셀 또는 워크시트 읽기
다음 예제에서는 workbook이 이미 LoadFromFile()로 로드되었다고 가정합니다. 인덱스 또는 이름으로 워크시트에 액세스하는 방법을 보여 줍니다.
Excel 파일에는 여러 워크시트가 포함될 수 있습니다. 위치나 이름으로 워크시트를 가져올 수 있습니다:
// By index (zero-based): the first sheet is 0, the second is 1
Worksheet first = workbook.Worksheets[0];
// By name
Worksheet sales = workbook.Worksheets["Sales"];
행 및 열 번호나 Excel 주소로 셀을 읽을 수도 있습니다:
// By row and column numbers (one-based): row 2, column 3
string byIndex = sales.Range[2, 3].Value;
// By Excel address
string byAddress = sales.Range["C2"].Value;
두 가지 시작점이 다르다는 점에 유의하세요. 워크시트 컬렉션은 0부터 시작하므로 첫 번째 워크시트는 Worksheets[0]입니다. 셀 행 및 열 번호는 1부터 시작하므로 Range[1, 1]은 셀 A1입니다.
셀 블록을 읽으려면 범위 주소를 전달하고 반복합니다:
CellRange range = sales.Range["A1:C3"];
foreach (CellRange cell in range.CellList)
{
Console.WriteLine({BODY_CONTENT}quot;{cell.RangeAddress}: {cell.Value}");
}
C#에서 Excel 데이터를 행별로 읽기
워크시트의 모든 데이터를 읽으려면 외부 루프로 행을 반복하고 내부 루프로 열을 반복합니다. 각 행 뒤에 줄 바꿈을 작성하여 콘솔 출력이 워크시트의 구조를 유지하도록 합니다:
using System;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
workbook.LoadFromFile("input.xlsx");
Worksheet sheet = workbook.Worksheets[0];
for (int row = 1; row <= sheet.LastDataRow; row++)
{
for (int col = 1; col <= sheet.LastDataColumn; col++)
{
Console.Write({BODY_CONTENT}quot;{sheet.Range[row, col].Value}\t");
}
Console.WriteLine();
}
}
finally
{
workbook.Dispose();
}
}
}
루프는 행 1과 열 1에서 LastDataRow 및 LastDataColumn까지 실행되며, 이들은 데이터가 포함된 마지막 행과 열을 반환합니다. 이렇게 하면 LastRow 및 LastColumn이 포함할 수 있는 서식이 지정되었지만 비어 있는 셀을 포함하지 않습니다. 워크시트의 레이아웃이 일반적이지 않은 경우 출력을 처리하기 전에 테스트 파일에서 실제 범위를 확인하세요.
아래 샘플 데이터를 포함하는 워크시트의 경우:
| 제품 | 범주 | 가격 |
|---|---|---|
| 키보드 | 액세서리 | 25 |
| 모니터 | 디스플레이 | 180 |
콘솔은 각 워크시트 행을 자체 줄에 표시하며, 셀 값은 탭으로 구분됩니다:
Product Category Price
Keyboard Accessories 25
Monitor Displays 180

Excel 데이터를 DataTable로 읽기
ADO.NET으로 워크시트 데이터를 처리하거나, 컨트롤에 바인딩하거나, 데이터베이스에 삽입하려면 ExportDataTable()을 사용하여 워크시트를 DataTable로 내보냅니다:
using System;
using System.Data;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
workbook.LoadFromFile("input.xlsx");
// Recalculate formulas before exporting computed values
workbook.CalculateAllValue();
Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(
sheet.AllocatedRange,
true, // exportColumnNames
true // computedFormulaValue
);
// Print each row to verify the exported data
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(string.Join("\t", row.ItemArray));
}
}
finally
{
workbook.Dispose();
}
}
}
이 오버로드는 세 개의 매개 변수를 사용합니다:
-
range: 내보낼 셀 범위입니다.
sheet.AllocatedRange는 워크시트의 사용된 범위를 반환합니다. 통합 문서의 서식 및 사용된 범위 설정에 따라 빈 셀이 포함될 수 있습니다. 특정 데이터 영역만 필요한 경우 명시적 범위를 사용하고 해당 경계를 확인하세요. -
exportColumnNames:
true이면 범위의 첫 번째 행이DataTable의 열 이름이 됩니다.false이면 첫 번째 행이 일반 데이터로 내보내집니다. -
computedFormulaValue:
true이면 내보내기에서 수식 텍스트 대신 계산된 수식 값을 사용합니다.false이면 수식 셀이 수식 텍스트로 내보내집니다. 데이터에 수식이 포함된 경우 자체 테스트 파일에서 내보낸 값을 확인하세요. 결과가 올바르게 채워지려면 내보내기 전에 수식 계산을 트리거해야 할 수 있습니다.
Windows Forms 애플리케이션에서 결과를 표시하려면 테이블을 DataGridView에 할당합니다:
dataGridView1.DataSource = dataTable;
나중에 처리할 때 의존하기 전에 내보낸 테이블의 열 이름과 데이터 형식을 자체 Excel 파일과 비교하여 확인하세요. 특정 범위 내보내기와 같은 더 많은 옵션은 C#에서 Excel을 DataTable로 변환에 대한 자세한 자습서를 참조하세요.

수식 결과 읽기 및 셀 값 처리
이 섹션의 코드 조각은 이전 예제에서처럼 sheet가 로드된 통합 문서의 워크시트를 참조한다고 가정합니다.
수식을 포함하는 셀에는 읽고 싶을 수 있는 두 가지가 있습니다: 수식 자체와 수식이 생성하는 결과입니다. HasFormula를 사용하여 셀에 수식이 포함되어 있는지 확인하고, Formula로 수식 텍스트를 가져오고, FormulaValue로 계산된 결과를 가져옵니다. 최신 수식 결과가 필요하면 통합 문서를 로드한 후 FormulaValue를 읽기 전에 workbook.CalculateAllValue()를 호출합니다.
CellRange cell = sheet.Range["D2"];
if (cell.HasFormula)
{
Console.WriteLine("Formula: " + cell.Formula);
Console.WriteLine("Result: " + cell.FormulaValue);
}
else
{
Console.WriteLine("Value: " + cell.Value);
}
수식 작업에 대한 자세한 내용은 Excel에서 수식 및 함수 추가 또는 읽기를 참조하세요.

콘텐츠 형식이 다른 셀은 형식화된 속성을 통해 읽을 수 있습니다:
CellRange priceCell = sheet.Range["C2"];
CellRange dateCell = sheet.Range["E2"];
double price = priceCell.NumberValue; // numeric value
DateTime date = dateCell.DateTimeValue; // date value
string text = sheet.Range["A2"].Text; // text as displayed
Excel은 숫자와 날짜를 일반 텍스트와 다른 방식으로 저장하므로 셀의 데이터 형식과 일치하는 속성을 선택하세요.
숫자 서식 및 표시 값 읽기
숫자 서식(백분율, 통화, 날짜)이 있는 셀의 경우 저장된 값, 서식 코드, 서식이 지정된 텍스트가 모두 다를 수 있습니다. 백분율 서식으로 0.15를 저장하는 셀은 15%로 표시됩니다. 원시 값에는 Value를, 서식 코드에는 NumberFormat을, Excel에 표시되는 텍스트에는 NumberText를 사용합니다:
| 속성 | 반환하는 값 |
|---|---|
Value |
원시 셀 값 |
NumberFormat |
숫자 서식 코드(예: 0.00%) |
NumberText |
서식을 적용한 후의 텍스트(예: 15%) |
CellRange cell = sheet.Range["C2"];
Console.WriteLine("Value: " + cell.Value);
Console.WriteLine("Number format: " + cell.NumberFormat);
Console.WriteLine("Formatted text: " + cell.NumberText);
다운스트림 로직에 필요한 것과 일치하는 속성을 선택하세요: 계산에는 숫자 값을, 표시에는 서식이 지정된 텍스트를 사용합니다. 숫자 서식에 대한 자세한 내용은 Excel에서 숫자 서식 설정을 참조하세요.
셀을 읽기 전에 비어 있는지 확인할 수 있습니다:
if (string.IsNullOrEmpty(sheet.Range["B5"].Value))
{
Console.WriteLine("B5 is empty.");
}
자주 묻는 질문
Microsoft Excel을 설치하지 않고 C#에서 Excel 파일을 읽을 수 있나요?
예. Free Spire.XLS는 Excel 파일을 직접 읽으며 코드를 실행하는 컴퓨터나 서버에 Microsoft Excel 또는 Interop이 필요하지 않습니다.
수식 대신 수식 결과를 어떻게 읽나요?
단일 셀의 경우 CellRange.HasFormula를 확인하고 CellRange.FormulaValue를 읽습니다. 전체 워크시트를 읽으려면 computedFormulaValue를 true로 설정하고 ExportDataTable()을 호출합니다. 수식 결과 읽기 및 셀 값 처리를 참조하세요.
암호로 보호된 Excel 파일을 읽을 수 있나요?
예. 파일을 로드하기 전에 열기 암호를 설정합니다:
Workbook workbook = new Workbook();
workbook.OpenPassword = "your-password";
workbook.LoadFromFile("protected.xlsx");
Free Spire.XLS는 어떤 Excel 파일 형식을 지원하나요?
Free Spire.XLS는 .xls, .xlsx, .xlsm 형식을 지원합니다.
무료 에디션의 제한 사항은 무엇인가요?
Free Spire.XLS for .NET은 개인 개발자와 소규모 프로젝트를 위한 커뮤니티 에디션입니다. .xls 형식으로 작업할 때 각 통합 문서는 5개 워크시트와 시트당 200개 행으로 제한됩니다. .xlsx 파일 로드 및 저장은 이러한 제한이 적용되지 않습니다. 더 높은 용량이나 고급 기능이 필요하면 Spire.XLS for .NET을 상용 에디션으로 사용할 수 있습니다.
더 높은 용량이나 고급 기능이 필요하면 Spire.XLS for .NET이 상용 에디션입니다. 무료 30일 평가판 라이선스를 요청하여 평가할 수 있습니다.