푸터 콘텐츠로 바로가기
IRONXL 사용하여

OleDb와 IronXL 사용하여 C#에서 DataTable을 Excel로 내보내기

Office 종속성 없이 C#에서 데이터 테이블을 Excel 파일로 내보내는 것은 올바른 라이브러리를 사용하면 간단합니다. 당신은 WorkBook.Create()을 호출하고, dataTable.Columns로부터 헤더를 작성하며, dataTable.Rows을 통해 셀에 값을 채운 후 workbook.SaveAs("output.xlsx")으로 저장합니다. 그 결과는 모든 플랫폼(예: .NET 10, Linux 컨테이너, Azure 서버리스 함수)에서 작동하는 완전히 형식화된 XLSX 파일입니다.

이 가이드는 레거시 올레디비 접근 방식과 현대적인 IronXL for .NET 방법을 비교합니다. 전통적인 올레디비 드라이버가 배포 및 호환성 문제를 일으키는 이유와, SQL 구문 또는 Windows 전용 드라이버 설치 없이 열 헤더, 데이터 유형, 셀 서식 및 대용량 데이터 세트를 다루는 명확하고 유지 관리 가능한 코드로 이를 대체하는 방법을 보여줍니다.


데이터 테이블 내보내기용 IronXL은 어떻게 설치합니까?

내보내기 코드를 작성하기 전에 프로젝트에 IronXL을 추가하십시오. Visual Studio에서 패키지 관리자 콘솔을 열고 다음을 실행하세요:

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

IronXL은 Microsoft Office, Access Database Engine 또는 COM 상호 운용 계층에 종속되지 않습니다. 패키지가 설치되면 Windows, Linux, macOS, Docker, AzureAWS에서 동일한 코드를 단 한 줄도 변경하지 않고 실행할 수 있습니다.

왜 올레디비는 드라이버 설치가 필요한가?

전통적인 올레디비 접근 방식은 Excel 파일을 데이터베이스로 취급합니다. 당신은 Microsoft.ACE.OLEDB.12.0 공급자를 사용하여 올레디비Connection을 설정하거나, 구형 Microsoft.Jet.OLEDB.4.0.xls 파일에 대해 사용한 후, SQL CREATE TABLEINSERT INTO 명령을 스프레드시트에 대해 실행합니다. 이는 Microsoft Office 또는 독립 실행형 Access Database Engine 재배포 가능한 파일이 이미 설치된 개발자 컴퓨터에서 작동합니다. 하지만 특히 클라우드 기능, Docker 컨테이너 및 헤드리스 .NET 10을 실행하는 서버 팜 같은 운영 환경에서는 드라이버가 거의 설치되지 않으며, 설치하려면 고급 권한과 프로세스와 일치하는 비트 수가 필요합니다.

개발자는 왜 여전히 Excel 내보내기에 올레디비를 사용할까?

.NET Framework의 일부로 이미 올레디비가 Excel 자동화의 기본 선택이 되었습니다. 개발자들은 이미 ADO.NET을 알고 있었기 때문에, 올레디비Connection, 올레디비Command, 그리고 올레디비DataAdapter을 사용하여 Excel에 쓰는 것은 자연스럽게 느껴졌습니다. 서드파티 패키지가 필요하지 않았으며, CREATE TABLEINSERT INTO의 SQL과 유사한 구문은 데이터베이스 프로그래밍에 익숙한 누구에게나 의도를 명확하게 했습니다.

여기 데이터 테이블을 올레디비를 사용하여 내보내는 전통적인 패턴이 있습니다:

using System.Data;
using System.Data.올레디비;

// Build a sample DataTable
DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

// 올레디비 connection string -- file must already exist on disk
string filename = @"C:\Output\Products.xlsx";
string connectionString =
    $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filename};" +
    "Extended Properties='Excel 12.0 Xml;HDR=YES'";

using 올레디비Connection connection = new(connectionString);
connection.Open();

// Create the sheet structure with SQL DDL
string create = "CREATE TABLE [Sheet1$] (ProductID INT, ProductName CHAR(255), Price DOUBLE)";
using (var createCmd = new 올레디비Command(create, connection))
    createCmd.Execute아니요nQuery();

// Insert rows one at a time
string insert = "INSERT INTO [Sheet1$] (ProductID, ProductName, Price) VALUES (?, ?, ?)";
using 올레디비Command insertCmd = new(insert, connection);
insertCmd.Parameters.Add(new 올레디비Parameter("ProductID", 올레디비Type.Integer));
insertCmd.Parameters.Add(new 올레디비Parameter("ProductName", 올레디비Type.VarChar, 255));
insertCmd.Parameters.Add(new 올레디비Parameter("Price", 올레디비Type.Double));

foreach (DataRow row in dataTable.Rows)
{
    insertCmd.Parameters[0].Value = row["ProductID"];
    insertCmd.Parameters[1].Value = row["ProductName"];
    insertCmd.Parameters[2].Value = row["Price"];
    insertCmd.Execute아니요nQuery();
}
using System.Data;
using System.Data.올레디비;

// Build a sample DataTable
DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

// 올레디비 connection string -- file must already exist on disk
string filename = @"C:\Output\Products.xlsx";
string connectionString =
    $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filename};" +
    "Extended Properties='Excel 12.0 Xml;HDR=YES'";

using 올레디비Connection connection = new(connectionString);
connection.Open();

// Create the sheet structure with SQL DDL
string create = "CREATE TABLE [Sheet1$] (ProductID INT, ProductName CHAR(255), Price DOUBLE)";
using (var createCmd = new 올레디비Command(create, connection))
    createCmd.Execute아니요nQuery();

// Insert rows one at a time
string insert = "INSERT INTO [Sheet1$] (ProductID, ProductName, Price) VALUES (?, ?, ?)";
using 올레디비Command insertCmd = new(insert, connection);
insertCmd.Parameters.Add(new 올레디비Parameter("ProductID", 올레디비Type.Integer));
insertCmd.Parameters.Add(new 올레디비Parameter("ProductName", 올레디비Type.VarChar, 255));
insertCmd.Parameters.Add(new 올레디비Parameter("Price", 올레디비Type.Double));

foreach (DataRow row in dataTable.Rows)
{
    insertCmd.Parameters[0].Value = row["ProductID"];
    insertCmd.Parameters[1].Value = row["ProductName"];
    insertCmd.Parameters[2].Value = row["Price"];
    insertCmd.Execute아니요nQuery();
}
$vbLabelText   $csharpLabel

이 코드는 각 DataRow를 별도의 데이터베이스 왕복으로 삽입합니다. 대규모 데이터 세트의 경우, 그 루프는 올레디비를 통한 배치 삽입 메커니즘을 사용할 수 없기 때문에 병목이 됩니다. 모든 행은 다음으로 이동하기 전에 모든 SQL 구문 분석, 매개 변수 바인드 및 쓰기 주기를 트리거합니다.

올레디비의 Excel 내보내기에 대한 주요 제한 사항은 무엇입니까?

올레디비가 부족한 이유를 이해하면 팀에게 이전의 정당성을 부여하고 적절한 대체품을 선택할 수 있도록 도와줍니다.

드라이버 종속성 및 비트 차이 충돌

Microsoft.ACE.OLEDB.12.0 공급자는 애플리케이션을 실행하는 모든 컴퓨터에 개별적으로 설치되어야 합니다. 프로세스가 64비트이지만 32비트 Access 데이터베이스 엔진만 사용 가능한 경우 -- Microsoft Office 32비트와 64비트 .NET 런타임이 함께 설치된 일반적인 구성 -- 연결 시 런타임에 예외를 발생시킵니다. Microsoft는 이러한 비트 차이 제한 사항을 문서화하고 드라이버와 호출 프로세스 간의 비트 차이 일치를 사용하는 것을 권장하지만, 이는 공유 호스팅 또는 컨테이너화된 환경에서 종종 실현 불가능합니다.

크로스 플랫폼 지원 없음

올레디비는 Windows 전용 기술입니다. .NET 10은 Linux 및 macOS를 네이티브로 지원하며, 현대 아키텍처는 점점 더 Docker 컨테이너에서 Linux 노드로 애플리케이션 워크로드를 실행합니다. System.Data.올레디비 네임스페이스는 비 Windows 운영체제에서 Platform아니요tSupportedException을 발생시키므로, 올레디비를 사용하는 모든 코드 경로는 이러한 플랫폼에서 실행이 완전히 차단됩니다.

셀 서식 기능 없음

올레디비는 스프레드시트를 평면 데이터베이스 테이블로 처리합니다. 원시 값을 삽입할 수는 있지만, 셀 글꼴, 배경색, 테두리, 숫자 형식 또는 열 너비를 적용할 메커니즘이 없습니다. 내보내기에 헤더 행 스타일링, 통화 형식 또는 조건부 색상이 적용된 전문적인 보고서가 필요한 경우, 올레디비는 이를 제공할 수 없습니다. 다른 라이브러리 또는 Excel Interop COM 객체를 사용한 두 번째 패스 작업이 필요하며, 이는 자체적인 Office 종속성을 추가합니다.

Excel 파일이 이미 존재해야 함

올레디비는 새 Excel 워크북을 처음부터 생성할 수 없습니다. 파일은 연결을 열기 전에 대상 경로에 이미 존재해야 합니다. 이는 미리 템플릿 파일을 준비하거나 다른 라이브러리를 사용하여 워크북을 생성하는 별도의 단계가 필요하며, 배포 패키지에 불필요한 복잡성을 추가합니다.

DELETE 작업이 지원되지 않음

Excel에 대한 올레디비 드라이버는 INSERT 및 제한된 UPDATE 작업을 지원하지만, DELETE FROM을 사용한 행 삭제는 지원하지 않습니다. 내보내기 후 행 제거가 필요한 데이터 조작 워크플로우는 수동 파일 조작이나 전체 파일 재생성에 의존해야 하며, 둘 다 올레디비 인터페이스를 통해 간단히 실행할 수 없습니다.

IronXL로 DataTable을 Excel로 내보내는 방법은 무엇입니까?

IronXL은 전체 올레디비 파이프라인을 직접 객체 모델로 대체합니다. 연결 문자열도, SQL 명령도, 드라이버 요구 사항도 없습니다. 당신은 WorkBook을 만들고, WorkSheet을 추가하며 각 셀에 대해 SetCellValue()을 호출합니다:

using IronXL;
using System.Data;

// Build the same DataTable
DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

// Create a new workbook and worksheet -- no template file needed
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Products");

// Write column headers into the first row
for (int col = 0; col < dataTable.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);
}

// Write data rows
for (int row = 0; row < dataTable.Rows.Count; row++)
{
    for (int col = 0; col < dataTable.Columns.Count; col++)
    {
        worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col].ToString());
    }
}

workbook.SaveAs("Products.xlsx");
using IronXL;
using System.Data;

// Build the same DataTable
DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

// Create a new workbook and worksheet -- no template file needed
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Products");

// Write column headers into the first row
for (int col = 0; col < dataTable.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);
}

// Write data rows
for (int row = 0; row < dataTable.Rows.Count; row++)
{
    for (int col = 0; col < dataTable.Columns.Count; col++)
    {
        worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col].ToString());
    }
}

workbook.SaveAs("Products.xlsx");
$vbLabelText   $csharpLabel

WorkBook.Create(ExcelFileFormat.XLSX)은 메모리에서 새 워크북을 구축합니다. 사전에 파일이 존재할 필요는 없습니다. CreateWorkSheet("Products")은 이름이 지정된 탭을 추가합니다. 중첩된 루프는 DataTable의 행 및 열 개수를 정확히 반영하며, 각 셀에 하나의 값을 씁니다. SaveAs()은 워크북을 완전히 적법한 XLSX 파일로 디스크에 플러시합니다.

산출

데이터 테이블을 올레디비 vs IronXL를 사용하여 Excel로 내보내는 방법: 이미지 1 - Excel 출력

사용 가능한 옵션에 대한 심층적인 검토를 위해, DataSet 및 DataTable 내보내기 방법 가이드는 추가적인 오버로드 및 배치 내보내기 패턴을 다룹니다.

DataTable 내보낼 때 셀 서식을 어떻게 추가합니까?

기본 내보내기 후 가장 일반적인 요구 사항 중 하나는 헤더 행에 스타일을 적용하여 데이터 행과 구별하는 것입니다. IronXL은 올레디비가 일치시킬 수 없는 전체 스타일 API를 노출합니다:

using IronXL;
using IronXl.Styles;
using System.Data;

DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Products");

// Write and style the header row
for (int col = 0; col < dataTable.Columns.Count; col++)
{
    var headerCell = worksheet[$"{(char)('A' + col)}1"];
    headerCell.Value = dataTable.Columns[col].ColumnName;
    headerCell.Style.Font.Bold = true;
    headerCell.Style.BackgroundColor = "#4472C4";
    headerCell.Style.Font.FontColor = "#FFFFFF";
}

// Write data rows with price column formatted as currency
for (int row = 0; row < dataTable.Rows.Count; row++)
{
    for (int col = 0; col < dataTable.Columns.Count; col++)
    {
        var cell = worksheet[$"{(char)('A' + col)}{row + 2}"];
        cell.Value = dataTable.Rows[row][col].ToString();

        // Apply currency format to the Price column
        if (dataTable.Columns[col].ColumnName == "Price")
            cell.FormatString = "$#,##0.00";
    }
}

// Auto-size columns so content is not clipped
worksheet.AutoSizeColumn(0);
worksheet.AutoSizeColumn(1);
worksheet.AutoSizeColumn(2);

workbook.SaveAs("ProductsStyled.xlsx");
using IronXL;
using IronXl.Styles;
using System.Data;

DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Products");

// Write and style the header row
for (int col = 0; col < dataTable.Columns.Count; col++)
{
    var headerCell = worksheet[$"{(char)('A' + col)}1"];
    headerCell.Value = dataTable.Columns[col].ColumnName;
    headerCell.Style.Font.Bold = true;
    headerCell.Style.BackgroundColor = "#4472C4";
    headerCell.Style.Font.FontColor = "#FFFFFF";
}

// Write data rows with price column formatted as currency
for (int row = 0; row < dataTable.Rows.Count; row++)
{
    for (int col = 0; col < dataTable.Columns.Count; col++)
    {
        var cell = worksheet[$"{(char)('A' + col)}{row + 2}"];
        cell.Value = dataTable.Rows[row][col].ToString();

        // Apply currency format to the Price column
        if (dataTable.Columns[col].ColumnName == "Price")
            cell.FormatString = "$#,##0.00";
    }
}

// Auto-size columns so content is not clipped
worksheet.AutoSizeColumn(0);
worksheet.AutoSizeColumn(1);
worksheet.AutoSizeColumn(2);

workbook.SaveAs("ProductsStyled.xlsx");
$vbLabelText   $csharpLabel

이는 파란색 헤더 행, 흰색 헤더 텍스트, 달러 기호와 소수점 두 자리로 표시된 가격 값을 포함한 파일을 생성합니다. 셀 글꼴 크기 가이드테두리 및 정렬 참조는 사용 가능한 전체 스타일 옵션 세트를 설명합니다.

대형 DataTable 내보내기 처리

수천 행의 데이터셋에 대해 성능은 중요합니다. IronXL은 SaveAs()에서 단일 디스크 쓰기를 하기 전에 모든 셀 값을 메모리에 기록하므로, 올레디비의 행당 한 번 Execute아니요nQuery() 패턴보다 훨씬 효율적입니다. 매우 큰 테이블을 내보내야 하는 경우, 메모리 효율적 스트리밍 기술을 다루는 DataTable을 Excel로 내보내는 가장 빠른 방법 가이드를 참조하세요.

또한 수식, 범위 및 명명된 테이블로 내보내기 로직을 그룹화할 수 있습니다. 스프레드시트 생성 방법.NET에서 Excel 쓰기 가이드는 DataTables에서 다중 시트 워크북 빌드를 위한 완전한 패턴을 제공합니다.

ASP.NET에서 DataTable을 Excel로 내보내는 방법은?

웹 애플리케이션에서는 보통 워크북을 직접 브라우저로 스트리밍하고 디스크에 저장하지 않습니다. IronXL은 workbook.ToByteArray()을 통해서 이것을 지원하며, 이진 콘텐츠를 반환하여 HTTP 응답에 쓸 수 있습니다:

// In an ASP.NET controller action
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Report");

// Assume dataTable is populated from your data source
for (int col = 0; col < dataTable.Columns.Count; col++)
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);

for (int row = 0; row < dataTable.Rows.Count; row++)
    for (int col = 0; col < dataTable.Columns.Count; col++)
        worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col].ToString());

byte[] fileBytes = workbook.ToByteArray();
return File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx");
// In an ASP.NET controller action
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Report");

// Assume dataTable is populated from your data source
for (int col = 0; col < dataTable.Columns.Count; col++)
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);

for (int row = 0; row < dataTable.Rows.Count; row++)
    for (int col = 0; col < dataTable.Columns.Count; col++)
        worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col].ToString());

byte[] fileBytes = workbook.ToByteArray();
return File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx");
$vbLabelText   $csharpLabel

ASP.NET DataTable 내보내기 Excel 튜토리얼은 ASP.NET 애플리케이션의 전체 컨트롤러 및 뷰 배선을 안내합니다. DataTable을 Excel로 변환하는 C# 가이드는 다중 시트 내보내기 및 DataSet 지원을 포함한 추가 시나리오를 다룹니다.

올레디비 vs. IronXL 비교

C#에서 DataTable을 Excel로 내보내기 위한 올레디비와 IronXL 간의 기능 비교
기능 올레디비 IronXL
드라이버 설치 필요 예 (ACE.OLEDB 또는 Jet) 아니요
크로스 플랫폼 (.NET 10 / Linux) 아니요
새 워크북을 처음부터 만들기 아니요
셀 서식 및 스타일링 아니요
수식 지원 아니요
배치 삽입 성능 행별 (느림) 메모리 내 (빠름)
행 삭제 지원 아니요
Docker / 컨테이너 지원 아니요

열 데이터 유형을 내보낼 때 어떻게 처리합니까?

DataTable 열이 숫자 또는 날짜 값을 포함하는 경우, 문자열로 쓰면 Excel이 셀을 텍스트로 처리하여 정렬, 필터링 및 수식 참조를 비활성화합니다. IronXL은 .ToString()을 호출하지 않고 값을 직접 전달할 때 원래의 유형을 유지합니다:

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("TypedData");

DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Amount", typeof(decimal));
table.Columns.Add("Date", typeof(DateTime));
table.Rows.Add(1, 1500.75m, new DateTime(2025, 6, 15));
table.Rows.Add(2, 3200.00m, new DateTime(2025, 7, 4));

// Write headers
for (int col = 0; col < table.Columns.Count; col++)
    worksheet.SetCellValue(0, col, table.Columns[col].ColumnName);

// Write typed values -- no .ToString() conversion
for (int row = 0; row < table.Rows.Count; row++)
{
    worksheet.SetCellValue(row + 1, 0, (int)table.Rows[row]["ID"]);
    worksheet.SetCellValue(row + 1, 1, (double)(decimal)table.Rows[row]["Amount"]);
    worksheet[$"C{row + 2}"].Value = (DateTime)table.Rows[row]["Date"];
    worksheet[$"C{row + 2}"].FormatString = "yyyy-MM-dd";
}

workbook.SaveAs("TypedData.xlsx");
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("TypedData");

DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Amount", typeof(decimal));
table.Columns.Add("Date", typeof(DateTime));
table.Rows.Add(1, 1500.75m, new DateTime(2025, 6, 15));
table.Rows.Add(2, 3200.00m, new DateTime(2025, 7, 4));

// Write headers
for (int col = 0; col < table.Columns.Count; col++)
    worksheet.SetCellValue(0, col, table.Columns[col].ColumnName);

// Write typed values -- no .ToString() conversion
for (int row = 0; row < table.Rows.Count; row++)
{
    worksheet.SetCellValue(row + 1, 0, (int)table.Rows[row]["ID"]);
    worksheet.SetCellValue(row + 1, 1, (double)(decimal)table.Rows[row]["Amount"]);
    worksheet[$"C{row + 2}"].Value = (DateTime)table.Rows[row]["Date"];
    worksheet[$"C{row + 2}"].FormatString = "yyyy-MM-dd";
}

workbook.SaveAs("TypedData.xlsx");
$vbLabelText   $csharpLabel

이제 Excel은 Amount 열을 숫자로 정렬할 수 있고 Date 열을 날짜 선택기로 필터링할 수 있습니다. 추가 데이터 형식 패턴에 대해서는 셀 데이터 형식 설정 가이드를 참조하세요. 내보낸 후 데이터를 다시 읽어야 하는 경우 Excel에서 DataTable로 튜토리얼이 역방향 작업을 다룹니다.

기존 올레디비 내보내기 코드 마이그레이션

올레디비에서 IronXL로 마이그레이션하는 데는 일반적으로 한 스프린트도 걸리지 않습니다. 구조적 변경 사항은 다음과 같습니다:

  1. 모든 using System.Data.올레디비 참조와 ACE 드라이버 래퍼 패키지에 대한 NuGet 참조를 제거하십시오.
  2. 올레디비Connection 초기화 블록을 WorkBook.Create(ExcelFileFormat.XLSX)으로 대체하십시오.
  3. CREATE TABLE 명령을 workbook.CreateWorkSheet("SheetName")으로 대체하십시오.
  4. INSERT INTO 반복문을 중첩된 SetCellValue() 호출로 대체하십시오. 셀당 하나씩입니다.
  5. connection.Close()workbook.SaveAs("output.xlsx")으로 대체십시오.

당신은 또한 내려오는 소비자가 아직 Excel 2007로 업그레이드하지 않았다면, 구형 형식 파일을 생성하기 위해 .xls 확장자로 workbook.SaveAs()을 호출할 수 있습니다. 스프레드시트 파일 형식 변환 가이드는 지원되는 모든 출력 형식을 나열합니다.

IronXL을 어떻게 테스트하고 라이선스합니까?

IronXL은 체험판 라이선스로 개발 시 무료로 사용할 수 있습니다. IronXL의 첫 호출 전에 코드에 키를 적용합니다:

IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
$vbLabelText   $csharpLabel

라이선스 키 적용 가이드는 구성 파일 및 환경 변수를 포함한 모든 배치 옵션을 다루고 있습니다. 클라우드 배포의 경우, DockerLinux 시작 페이지에서 플랫폼별 설정 단계를 다룹니다.

Microsoft는 올레디비 시나리오에 대한 Access Database Engine의 알려진 제한 사항을 문서화하고, NuGet.org는 IronXL 패키지를 전체 버전 기록 및 다운로드 통계와 함께 호스팅합니다. 공식 Open XML SDK 문서는 IronXL이 구현하는 기초적인 XLSX 사양을 설명합니다.

다음 단계는 무엇입니까?

이제 올레디비 드라이버 없이, SQL 구문 없이, 그리고 플랫폼 제한 없이 DataTable을 XLSX 파일로 내보내기 위한 워킹 패턴을 가지고 있습니다. 핵심 워크플로 -- WorkBook.Create(), CreateWorkSheet(), 루프 내에서 SetCellValue(), 그리고 SaveAs() --은 세 행 샘플에서 수십만 행의 데이터 세트로 확장할 수 있습니다.

기존 올레디비 내보내기를 위에서 보여준 기본 IronXL 패턴으로 대체한 후, 데이터 내보내기가 확인되면 스타일링 API를 사용하여 포맷을 추가하세요. IronXL 시작 가이드기능 개요는 라이브러리가 지원하는 전체 범위를 이해하기 위한 좋은 다음 읽을 거리입니다. 같은 파이프라인의 일부로 CSV 파일을 작업하는 경우, C# DataTable에서 CSV로 가이드는 동일한 DataTable 객체에서 쉼표로 구분된 출력을 생성하는 방법을 보여줍니다.

자주 묻는 질문

C#에서 OleDb를 사용하여 DataTable을 Excel로 내보낼 때의 제한 사항은 무엇입니까?

C#에서 OleDb를 사용하여 DataTable을 Excel로 내보내는 것은 기존 방식의 한계 때문에 불편함을 초래할 수 있습니다. 개발자들은 호환성 문제, 성능 저하, 복잡한 오류 처리와 같은 제약에 자주 직면하게 되므로 IronXL 과 같은 최신 대안이 더 매력적으로 느껴집니다.

IronXL DataTable을 Excel로 내보내는 과정을 어떻게 개선합니까?

IronXL DataTable을 Excel로 내보내는 최신 방식을 제공하여 성능 향상, 폭넓은 호환성 및 간소화된 코드를 지원합니다. 일반적인 OleDb 사용 시 발생하는 문제점을 해결하여 .NET 개발자가 Excel 내보내기를 더욱 쉽게 관리할 수 있도록 해줍니다.

DataTable 내보내기를 위해 OleDb에서 IronXL 로 전환하는 것을 고려해야 하는 이유는 무엇입니까?

DataTable 내보내기에 IronXL 사용하면 성능 향상, 구현 간소화, 최신 .NET 애플리케이션과의 호환성 강화 등 여러 가지 이점이 있어 개발에 필요한 시간과 노력을 줄일 수 있습니다.

IronXL OleDb보다 대용량 DataTable 내보내기를 더 효율적으로 처리할 수 있습니까?

네, IronXL 대규모 DataTable 내보내기를 효율적으로 처리하도록 설계되어 OleDb에 비해 처리 속도가 빠르고 메모리 사용량이 적어 방대한 데이터 세트를 다루는 애플리케이션에 이상적입니다.

IronXL 최신 버전의 C# 및 .NET 과 호환됩니까?

IronXL 최신 버전의 C# 및 .NET 과 완벽하게 호환되므로 최신 애플리케이션과의 원활한 통합을 보장하며, 새로운 기능 및 개선 사항을 지원하기 위한 지속적인 업데이트를 제공합니다.

IronXL 과 같은 최신 대안은 기존 OleDb에 비해 어떤 이점을 제공합니까?

IronXL 과 같은 최신 대안은 향상된 성능, 간편한 오류 처리, 다양한 Excel 형식과의 뛰어난 호환성, 간소화된 코드 등의 이점을 제공하여 개발자 생산성을 크게 향상시킬 수 있습니다.

IronXL OleDb와 비교했을 때 오류 관리를 어떻게 처리하나요?

IronXL 명확한 예외 처리를 통해 간소화된 오류 관리를 제공하여 OleDb와 관련된 복잡성과 잠재적 문제를 줄여 개발자가 애플리케이션을 더 쉽게 디버깅하고 유지 관리할 수 있도록 합니다.

UI 기반 .NET 애플리케이션에서 DataTable을 Excel로 내보내는 일반적인 사용 사례는 무엇입니까?

UI 기반 .NET 애플리케이션에서 DataTable을 Excel로 내보내는 기능은 보고서 생성, 데이터 분석 및 사용자 친화적인 데이터 조작에 일반적으로 사용되며, 종종 객체 송신자 패턴을 사용하는 이벤트 핸들러에서 실행됩니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me