C#으로 엑셀 파일을 만드는 방법

How to Create an Excel File in C# (.NET Tutorial)

This article was translated from English: Does it need improvement?
Translated
View the article in English

제가 함께 작업하는 대부분의 팀은 적어도 읽기만큼 자주 엑셀 파일을 생성 해야 합니다: 송장, 내보내기, 재무팀이 열고 필터링할 수 있는 월별 보고서 등. 저는 콘솔 앱, ASP.NET 서비스, 백그라운드 작업자에 걸쳐 이 작업 흐름을 수십 번 구축했습니다. IronXL의 API는 자체적으로 엑셀이 생각하는 방식에 충분히 가깝기 때문에 코드는 거의 명세처럼 읽히지만, 몇 가지 형식 지정 및 저장 결정은 API 표면에서 보여주기보다 더 중요합니다. 이 가이드는 제가 실제로 프로덕션에서 XLSX 파일을 생성하는 방법으로, 처음 몇 번에 걸쳐 시간을 소모한 이슈들도 포함되어 있습니다.

이 라이브러리는 .NET 8, .NET 9, .NET Core, 및 .NET Framework에서 Windows, Linux, macOS, Azure 및 AWS에서 실행되며, 호스트에 Microsoft Office가 필요하지 않습니다. 아래의 코드 경로는 이러한 모든 대상에서 동일합니다.

빠른 시작: 엑셀 파일 만들기

세 줄로 새로운 워크북을 설정하고 A1에 값을 쓰고 파일을 디스크에 저장합니다. 엑셀 프로세스가 개입되지 않으며, COM 전달도 없습니다.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronXL.Excel 설치하기

    PM > Install-Package IronXL.Excel
  2. 다음 코드 조각을 복사하여 실행하세요.

    WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronXL 사용 시작하기

    arrow pointer

IronXL이란 무엇이며, 엑셀 파일 생성에 IronXL을 사용하는 이유는 무엇일까요?

IronXL은 스프레드시트 파일을 읽고, 편집하고, 생성하는 C# 및 VB.NET 엑셀 API입니다. 이는 Microsoft Office 또는 Excel Interop을 요구하지 않으며, NuGet 참조 및 using 지시문에 대한 배포를 유지합니다.

IronXL은 .NET 9, .NET 8, .NET Core, .NET Framework, Xamarin, 모바일, Linux, macOS 및 Azure 환경을 완벽하게 지원합니다.

IronXL의 특징

  • .NET 개발팀의 직접적인 지원을 제공합니다.
  • Microsoft Visual Studio를 이용한 빠른 설치
  • 개발은 무료입니다. $999 로부터의 라이선스

엑셀 파일을 빠르게 만들고 저장하는 방법은 무엇인가요?

NuGet을 통해 IronXL을 설치 하거나 DLL을 직접 다운로드하십시오 . WorkBook 클래스는 모든 Excel 작업의 진입점이며, WorkSheet 클래스는 개별 시트를 조작하기 위한 메서드를 노출합니다. 전체 단계별 안내는 아래의 1단계에서 시작됩니다.


How Do I Install the IronXL C# Library?

Visual Studio의 NuGet 패키지 관리자를 통해 IronXL을 설치하거나 패키지 관리자 콘솔을 사용하십시오.

Install-Package IronXL.Excel

프로젝트 메뉴를 통해 또는 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하여 NuGet 패키지 관리자에 액세스할 수 있습니다.

Visual Studio 프로젝트 메뉴에 표시된 NuGet 패키지 관리 옵션 그림 3 - 프로젝트 메뉴에서 NuGet 패키지 관리자에 접근

솔루션 탐색기 컨텍스트 메뉴에서 NuGet 패키지 관리 옵션 표시 그림 4 - 솔루션 탐색기 내에서의 오른쪽 클릭 컨텍스트 메뉴

패키지 목록에서 IronXL.Excel 를 찾아 설치를 클릭하십시오.


NuGet 패키지 관리자에서 설치 준비 완료된 IronXL.Excel 패키지 표시 그림 5 - NuGet 패키지 관리자를 통해 IronXL.Excel 설치

또한, IronXL DLL을 직접 다운로드하고 이를 참고로 프로젝트에 추가하십시오 솔루션 탐색기 > 참조 > IronXL.dll 을 찾아서.

IronXL 웹사이트 다운로드 페이지에 설치 지침 및 다운로드 버튼 표시 그림 6 - 공식 웹사이트에서 IronXL 라이브러리 다운로드

{i:(IronXL은 Microsoft Office나 Excel Interop 설치가 필요하지 않습니다. 이는 Windows, Linux, macOS 및 클라우드 환경을 포함하여 .NET이 지원하는 모든 플랫폼에서 실행됩니다.)}


.NET 프로젝트는 어떻게 설정하나요?

IronXL은 어떤 .NET 프로젝트 유형에서도 작동합니다: 콘솔 앱, ASP.NET 웹 앱, API 또는 데스크톱 도구. 아래 예제는 ASP.NET 웹 애플리케이션을 사용하지만, 동일한 코드 경로가 모든 프로젝트 템플릿에서 작동합니다.

다음 단계를 따라 ASP.NET 웹사이트를 만드세요.

  1. Visual Studio를 엽니다.
  2. 파일 > 새 프로젝트를 클릭합니다.
  3. 프로젝트 유형 목록에서 Visual C# 아래의 웹을 선택합니다.
  4. ASP.NET 웹 애플리케이션 선택


    Visual Studio의 새 프로젝트 대화 상자에서 ASP.NET 웹 애플리케이션이 선택되어 있습니다.

    그림 1Create new ASP.NET project

  5. 확인을 클릭하세요
  6. 웹 양식 템플릿을 선택합니다.

    ASP.NET 프로젝트 템플릿 선택 화면에서 웹 폼 옵션이 표시됩니다.

    그림 2Select Web Forms template

  7. 확인을 클릭하세요

프로젝트 준비가 완료되면 IronXL을 설치하여 Excel 파일을 프로그래밍 방식으로 생성해 보세요.


How Do I Create an Excel Workbook in C#?

새 워크북은 WorkBook.Create 를 호출하여 생성되며, 파일 형식은 열거형으로 전달됩니다:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-3.cs
WorkSheet workSheet = workBook.CreateWorkSheet("2020 Budget");
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("2020 Budget")
$vbLabelText   $csharpLabel

XLS (Excel 97-2003) 및 XLSX (Excel 2007+) 형식을 모두 지원하는 Create 메서드. XLSX 형식은 성능 향상 및 파일 크기 축소에 권장됩니다.

  • XLSX : 모든 최신 Excel 버전(2007 이상)에 권장 - 파일 크기가 작고 성능이 향상됩니다.
  • XLS : Excel 97~2003 버전과의 호환성을 위한 기존 형식입니다.

워크북에 워크시트를 추가하려면 어떻게 해야 하나요?

CreateWorkSheet를 통해 워크시트를 추가하십시오:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-4.cs
workSheet["A1"].Value = "January";
workSheet["B1"].Value = "February";
workSheet["C1"].Value = "March";
workSheet["D1"].Value = "April";
workSheet["E1"].Value = "May";
workSheet["F1"].Value = "June";
workSheet["G1"].Value = "July";
workSheet["H1"].Value = "August";
workSheet["I1"].Value = "September";
workSheet["J1"].Value = "October";
workSheet["K1"].Value = "November";
workSheet["L1"].Value = "December";
workSheet("A1").Value = "January"
workSheet("B1").Value = "February"
workSheet("C1").Value = "March"
workSheet("D1").Value = "April"
workSheet("E1").Value = "May"
workSheet("F1").Value = "June"
workSheet("G1").Value = "July"
workSheet("H1").Value = "August"
workSheet("I1").Value = "September"
workSheet("J1").Value = "October"
workSheet("K1").Value = "November"
workSheet("L1").Value = "December"
$vbLabelText   $csharpLabel

워크북에는 하나 이상의 워크시트가 포함되어 있습니다. 각 워크시트는 행과 열로 구성되며, 행과 열이 교차하는 부분에 셀이 있습니다. 작업 책에 새 시트를 추가하려면 CreateWorkSheet 메서드를 사용하십시오.

  • WorkBook.CreateWorkSheet(String): 주어진 탭 이름으로 새 시트 추가
  • WorkSheet: 이름을 통해 기존 시트를 가져옵니다.
  • 통합 문서 내에서 시트 이름은 고유해야 합니다.

엑셀에서 셀 값을 설정하는 방법은 무엇인가요?

셀 값을 수동으로 설정하려면 어떻게 해야 하나요?

셀 접근은 Excel에서 볼 수 있는 동일한 A1 스타일 주소 문자열을 사용합니다:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-5.cs
Random r = new Random();
for (int i = 2 ; i <= 11 ; i++)
{
    workSheet["A" + i].Value = r.Next(1, 1000);
    workSheet["B" + i].Value = r.Next(1000, 2000);
    workSheet["C" + i].Value = r.Next(2000, 3000);
    workSheet["D" + i].Value = r.Next(3000, 4000);
    workSheet["E" + i].Value = r.Next(4000, 5000);
    workSheet["F" + i].Value = r.Next(5000, 6000);
    workSheet["G" + i].Value = r.Next(6000, 7000);
    workSheet["H" + i].Value = r.Next(7000, 8000);
    workSheet["I" + i].Value = r.Next(8000, 9000);
    workSheet["J" + i].Value = r.Next(9000, 10000);
    workSheet["K" + i].Value = r.Next(10000, 11000);
    workSheet["L" + i].Value = r.Next(11000, 12000);
}
Dim r As New Random()
For i As Integer = 2 To 11
	workSheet("A" & i).Value = r.Next(1, 1000)
	workSheet("B" & i).Value = r.Next(1000, 2000)
	workSheet("C" & i).Value = r.Next(2000, 3000)
	workSheet("D" & i).Value = r.Next(3000, 4000)
	workSheet("E" & i).Value = r.Next(4000, 5000)
	workSheet("F" & i).Value = r.Next(5000, 6000)
	workSheet("G" & i).Value = r.Next(6000, 7000)
	workSheet("H" & i).Value = r.Next(7000, 8000)
	workSheet("I" & i).Value = r.Next(8000, 9000)
	workSheet("J" & i).Value = r.Next(9000, 10000)
	workSheet("K" & i).Value = r.Next(10000, 11000)
	workSheet("L" & i).Value = r.Next(11000, 12000)
Next i
$vbLabelText   $csharpLabel

문자열, 숫자, 날짜 및 부울을 포함한 다양한 데이터 유형을 허용하는 Value 속성. IronXL은 데이터 유형에 따라 셀 형식을 자동으로 지정합니다.

셀 값을 동적으로 설정하는 방법은 무엇인가요?

실행 시간에 행 개수가 알려질 때, 문자열 보간은 반복문 본문을 읽기 쉽게 만듭니다:

// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
' Initialize random number generator for sample data
Dim r As New Random()

' Populate cells with random budget data for each month
For i As Integer = 2 To 11
	' Set different budget categories with increasing ranges
	workSheet($"A{i}").Value = r.Next(1, 1000) ' Office Supplies
	workSheet($"B{i}").Value = r.Next(1000, 2000) ' Utilities
	workSheet($"C{i}").Value = r.Next(2000, 3000) ' Rent
	workSheet($"D{i}").Value = r.Next(3000, 4000) ' Salaries
	workSheet($"E{i}").Value = r.Next(4000, 5000) ' Marketing
	workSheet($"F{i}").Value = r.Next(5000, 6000) ' IT Services
	workSheet($"G{i}").Value = r.Next(6000, 7000) ' Travel
	workSheet($"H{i}").Value = r.Next(7000, 8000) ' Training
	workSheet($"I{i}").Value = r.Next(8000, 9000) ' Insurance
	workSheet($"J{i}").Value = r.Next(9000, 10000) ' Equipment
	workSheet($"K{i}").Value = r.Next(10000, 11000) ' Research
	workSheet($"L{i}").Value = r.Next(11000, 12000) ' Misc
Next i

' Alternative: Set range of cells with same value
workSheet("A13:L13").Value = 0 ' Initialize totals row
$vbLabelText   $csharpLabel

문자열 보간($"...")은 셀을 동적으로 참조하기 쉽게 만듭니다. 개별 셀과 범위를 모두 지원하는 Item 인덱서.

데이터베이스에서 엑셀로 데이터를 가져오는 방법은 무엇인가요?

데이터베이스에서 엑셀로 데이터를 불러오는 것은 흔히 요구되는 작업입니다.

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-7.cs
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")
$vbLabelText   $csharpLabel

이 예제는 데이터베이스에서 Excel 데이터를 읽고, 서식을 적용하고, 수식을 사용하여 계산하는 방법을 보여줍니다. Excel과 마찬가지로 사용자 정의 숫자 서식을 사용할 수 있게 해주는 FormatString 속성.


엑셀 셀에 서식을 적용하는 방법은 무엇인가요?

엑셀에서 배경색을 설정하는 방법은 무엇인가요?

셀이나 범위에서 Style 객체를 통해 모든 배경, 교대 행 색상 및 글꼴 색상 재정의:

// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.SetColor("#FFFFFF"); // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.SetColor("#FFFFFF"); // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
' Set header row background to light gray using hex color
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")

' Apply different colors for data categorization
workSheet("A2:A11").Style.SetBackgroundColor("#E7F3FF") ' Light blue for January
workSheet("B2:B11").Style.SetBackgroundColor("#FFF2CC") ' Light yellow for February

' Highlight important cells with bold colors
workSheet("L12").Style.SetBackgroundColor("#FF0000") ' Red for totals
workSheet("L12").Style.Font.SetColor("#FFFFFF") ' White text

' Create alternating row colors for better readability
For row As Integer = 2 To 11
    If row Mod 2 = 0 Then
        workSheet($"A{row}:L{row}").Style.SetBackgroundColor("#F2F2F2")
    End If
Next row
$vbLabelText   $csharpLabel

SetBackgroundColor 메서드는 16진수 색상 코드를 허용합니다. 대조를 읽기 쉽게 유지하려면 Font.SetColor와 배경색을 조합하십시오.

엑셀에서 테두리를 만드는 방법은 무엇인가요?

경계는 데이터 영역을 정의하고 구조를 개선하는 데 도움이 됩니다.

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-9.cs
// Use IronXL built-in aggregations
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign value to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
' Use IronXL built-in aggregations
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign value to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
$vbLabelText   $csharpLabel

IronXL은 얇은 테두리, 중간 테두리, 두꺼운 테두리, 이중 테두리, 점선 테두리, 파선 테두리 등 다양한 테두리 유형을 지원합니다. 테두리의 각 면은 독립적으로 스타일을 지정할 수 있습니다.


How Do I Use Excel Formulas in C#?

IronXL은 작성 시 Excel 수식을 평가하여 통합 문서가 저장되면 값이 즉시 올바르게 설정됩니다:

// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workBook.EvaluateAll();
// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workBook.EvaluateAll();
' Use built-in aggregation functions for ranges
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign calculated values to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min

' Or use Excel formulas directly
workSheet("A12").Formula = "=SUM(A2:A11)"
workSheet("B12").Formula = "=AVERAGE(B2:B11)"
workSheet("C12").Formula = "=MAX(C2:C11)"
workSheet("D12").Formula = "=MIN(D2:D11)"

' Complex formulas with multiple functions
workSheet("E12").Formula = "=IF(SUM(E2:E11)>50000,""Over Budget"",""On Track"")"
workSheet("F12").Formula = "=SUMIF(F2:F11,"">5000"")"

' Percentage calculations
workSheet("G12").Formula = "=G11/SUM(G2:G11)*100"
workSheet("G12").FormatString = "0.00%"

' Ensure all formulas calculate
workBook.EvaluateAll()
$vbLabelText   $csharpLabel

빠른 계산을 위한 Sum, Average, MaxMin과 같은 메서드를 제공하는 Range 클래스. 보다 복잡한 시나리오를 위해 Excel 수식을 직접 설정하려면 Formula 속성을 사용하십시오.

{t:(.Sum(), .Avg(), .Max().Min()과 같은 IronXL의 내장 메서드를 범위를 다룰 때 기본 문자열보다 선호하십시오. 그들은 타입 안전성을 가지고 있으며, 컴파일 시간에 수식 문법 오류를 방지합니다.)}


워크시트 및 인쇄 속성은 어떻게 설정하나요?

IronXL을 사용하여 개별 워크시트를 보호하고, 행과 열을 고정하고, 인쇄 형식 옵션을 설정할 수 있습니다.

워크시트 속성은 어떻게 설정할 수 있나요?

워크시트를 보호하고 보기 옵션을 제어하세요.

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-11.cs
workSheet.SetPrintArea("A1:L12");
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape;
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4;
workSheet.SetPrintArea("A1:L12")
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4
$vbLabelText   $csharpLabel

워크시트 보호 기능은 실수로 인한 수정을 방지하고, 창 고정 기능은 스크롤하는 동안 중요한 행이나 열이 계속 보이도록 유지합니다.

고정 창 그림 7 - 스크롤 시 고정된 헤더 행이 화면에 표시됨

보호된 워크시트를 수정하려면 비밀번호가 필요한 Excel 보호 다이얼로그 그림 8 - 비밀번호 보호로 인해 무단 편집이 방지됨

페이지 및 인쇄 설정은 어떻게 구성하나요?

인쇄 레이아웃 옵션(방향, 용지 크기, 여백, 크기 조정, 머리글, 바닥글)은 모두 WorkSheet.PrintSetup을 통해 노출됩니다:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-12.cs
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx")
$vbLabelText   $csharpLabel

Excel의 인쇄 설정과 일치하는 포괄적인 인쇄 구성 옵션을 제공하는 IPrintSetup 클래스.

가로 방향 및 A4 용지 크기 설정으로 된 Excel 인쇄 미리보기 그림 9 - 가로 방향 및 사용자 지정 여백을 사용한 인쇄 미리 보기


엑셀 통합 문서를 어떻게 저장하나요?

워크북을 다양한 형식으로 저장하세요.

// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
' Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx")

' Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls")

' Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv")

' Save as JSON for web applications
workBook.SaveAsJson("Budget.json")

' Save to stream for web downloads or cloud storage
Using stream = New MemoryStream()
	workBook.SaveAs(stream)
	Dim excelData() As Byte = stream.ToArray()
	' Send to client or save to cloud
End Using

' Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8)
$vbLabelText   $csharpLabel

IronXL은 XLSX, XLS, CSV, TSV 및 JSON을 포함한 다양한 내보내기 형식을 지원합니다. 파일 확장자에서 형식을 선택하는 Save 메서드.

  • XLSX / XLS : 서식, 수식 및 여러 시트가 포함된 완전한 Excel 형식
  • CSV: 데이터 교환을 위한 일반 텍스트, 파일당 하나의 시트
  • JSON : 웹 API 및 데이터 파이프라인을 위한 구조화된 출력 형식 스트림: 메모리 내 출력, 웹 다운로드나 클라우드 저장소에 유용함

생성에는 실제로 얼마나 시간이 걸리나요?

나는 Windows 11 상자에서 .NET 9.0.7을 사용하여 대부분의 프로덕션 내보내기가 끝나는 크기의 워크북에 대한 구체적인 수치를 얻기 위해 생성 벤치마크를 실행했습니다. 테스트 하니스는 10,000행, 세 열 짜리 XLSX를 메모리에 생성하고 차가운 상태와 따뜻한 상태의 모든 SaveAs 호출을 단일 호출로 디스크에 작성합니다. 전체 프로젝트는 아래의 CreateExcelBenchmark 샘플에 있습니다. 세 개의 별도 프로세스 실행이 대략 여기 도착했습니다:

작업 첫 번째 차가운 실행 (새로운 프로세스) 10번 반복에 대한 평균 온도
10,000행, 3열 XLSX를 빌드하고 한 번 SaveAs ~570–910 ms ~350 ms (범위 240–450 ms)

차가운 숫자는 IronXL의 어셈블리 로드와 JIT 초기화에 의해 지배됩니다. 프로세스가 뜨거워지면 생성 시간은 백그라운드 활동의 실행 간 변동에 따라 300ms 중반대로 떨어집니다. 상당히 큰 작업 책(수십만 행, 여러 시트, 무거운 스타일)을 위해 전체 작업 책을 메모리에 쓰고 끝에서 정확히 한 번 SaveAs을 호출합니다. 스타일의 성장은 모든 것을 직렬화하므로 각 반복에서 비용이 증가합니다. 그렇게 되는 가장 흔한 이유는 작업 책이 성장함에 따라 루프 안에서 SaveAs를 반복적으로 호출하는 것입니다.


일반적인 문제

몇 가지는 사람들을 자주 물어볼 정도로 자주 발생하여 별도의 섹션이 필요합니다.

날짜 및 통화에서 FormatString를 잊음

제가 가장 자주 보는 형식 함정: DateTime.Value를 설정하였지만 FormatString를 잊음. 날짜는 올바르게 저장되지만 포맷 문자열인 "yyyy-MM-dd"과 같은 형식을 적용하기 전까지는 Excel이 이를 원시 일련 번호(45292는 2024-01-01을 의미)로 표시합니다. 통화도 동일한 문제가 있습니다: 숫자는 맞지만 "$#,##0.00" 없이 올바르게 표시되지 않습니다. 이제 값과 형식을 인접한 줄에 작성하여 둘이 서로 떨어지지 않도록 합니다:

var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";

var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";

var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
Dim dateCell = sheet("A2")
dateCell.Value = DateTime.Today
dateCell.FormatString = "yyyy-MM-dd"

Dim moneyCell = sheet("B2")
moneyCell.Value = 1499.95D
moneyCell.FormatString = "$#,##0.00"
$vbLabelText   $csharpLabel

XLS는 65,536행에서 조용히 잘립니다

이것은 기사 상단의 형식 선택 섹션에 언급되어 있지만 오류 모드가 조용하기 때문에 여기서 자신의 자리를 차지하고 있습니다: 한 시트당 최대 65,536행인 ExcelFileFormat.XLS이 도달하면 예외나 경고 없이 해당 행이 삭제됩니다. 내보내기가 "성공"하면 데이터가 사라집니다. 다운스트림 시스템에서 XLSX 파일을 읽을 수 없는 경우가 아니라면, 데이터가 많은 경우에는 XLSX를 선택하세요.

"Excel이 파일이 손상되었다고 표시합니다"

생성된 파일이 열리지 않거나 Excel에서 파일이 손상되었다고 주장하는 경우, 원인은 거의 항상 두 가지 중 하나입니다. 파일 스트림이 제대로 처리되지 않아서 디스크의 바이트가 잘렸습니다. 또는 이전 실행에서 아직 잠겨있는 경로에 기록되어 일부 데이터만 통과했을 수 있습니다. 파일을 만지기 전이나 그 주위에 있는 모든 것을 만지기 전에 using 블록을 그 주위에 (MemoryStream 또는 FileStream, 객체 스트림이 될 수 있음) 배치하십시오.

벤치마크 숫자를 위한 샘플 프로젝트

이전의 타이밍 숫자를 재현하고 싶다면, 하네스는 작은 .NET 9 콘솔 앱입니다:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-15.cs
// CreateExcelBenchmark/Program.cs (excerpt)
IronXL.License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY");

var sw = Stopwatch.StartNew();
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var sheet = workbook.CreateWorkSheet("Data");
sheet["A1"].Value = "Id";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Amount";
for (int i = 0; i < 10_000; i++)
{
    int row = i + 2;
    sheet[$"A{row}"].Value = i + 1;
    sheet[$"B{row}"].Value = $"Item {i + 1}";
    sheet[$"C{row}"].Value = (i + 1) * 1.25m;
}
workbook.SaveAs("Generated.xlsx");
sw.Stop();
Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms");
Imports System
Imports System.Diagnostics
Imports IronXL

Module Program
    Sub Main()
        License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY")

        Dim sw As Stopwatch = Stopwatch.StartNew()
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim sheet As WorkSheet = workbook.CreateWorkSheet("Data")
        sheet("A1").Value = "Id"
        sheet("B1").Value = "Name"
        sheet("C1").Value = "Amount"
        For i As Integer = 0 To 9999
            Dim row As Integer = i + 2
            sheet($"A{row}").Value = i + 1
            sheet($"B{row}").Value = $"Item {i + 1}"
            sheet($"C{row}").Value = (i + 1) * 1.25D
        Next
        workbook.SaveAs("Generated.xlsx")
        sw.Stop()
        Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms")
    End Sub
End Module
$vbLabelText   $csharpLabel

dotnet run -c Release 아래에서 실행하고 자신의 행 수, 열 수 또는 스타일을 대체하여 작업 책의 복잡도로 인해 숫자가 어떻게 변하는지 확인하세요.


객체 참조 및 리소스

IronXL API 레퍼런스는 이 튜토리얼에서 다루는 모든 클래스 및 메서드뿐만 아니라 다루지 않는 것들도 포함하고 있습니다.

관련 Excel 작업에 대한 추가 튜토리얼:

요약

Microsoft Office 또는 Interop에 의존하지 않고 XLSX, XLS, CSV 및 JSON 형식으로 Excel 작업 책을 생성하는 IronXL.Excel. 내가 모든 프로젝트에서 따르는 레시피는 같다: 작업 책을 만들고, 워크시트를 추가하고, 값 및 수식을 작성하고, 디스플레이가 중요한 경우 포맷 문자열을 설정하고, 마지막에 한 번 저장하십시오.

IronXL을 실제 운영 환경에서 사용할 준비가 되셨습니까? 무료 체험을 시작 하거나 라이선스 옵션을 확인하세요 .

자주 묻는 질문

Interop을 사용하지 않고 C#에서 Excel 파일을 생성하려면 어떻게 해야 하나요?

IronXL을 사용하면 Interop 없이도 Excel 파일을 생성할 수 있습니다. IronXL은 간단한 API를 제공합니다. WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX) 사용할 수 있습니다. 이 방법은 Microsoft Office 설치 없이 모든 .NET 플랫폼에서 작동합니다.

C#을 이용한 엑셀 파일 생성은 어떤 플랫폼을 지원하나요?

IronXL은 Windows, macOS, Linux, Docker, Azure 및 AWS 환경에서 실행되는 .NET 10, .NET 9, .NET 8, .NET Core, .NET Framework 4.6.2 이상에서 Excel 파일 생성을 지원합니다.

엑셀 파일 생성을 위한 C# 라이브러리를 어떻게 설치하나요?

Visual Studio의 NuGet 패키지 관리자를 통해 IronXL을 설치하려면 PM> Install-Package IronXL.Excel 명령을 사용하거나 nuget.org에서 직접 다운로드하십시오.

프로그램을 이용하여 새 엑셀 통합 문서를 만드는 방법은 무엇인가요?

IronXL을 사용하여 WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX) 로 통합 문서를 만든 다음 workbook.CreateWorkSheet("SheetName") 사용하여 워크시트를 추가합니다.

C#을 사용하여 Excel 워크시트의 셀 값을 설정하는 방법은 무엇입니까?

IronXL에서 직관적인 구문을 사용하여 셀 값을 설정합니다. 예: worksheet["A1"].Value = "Hello World" 또는 범위를 설정합니다. 예: worksheet["A1:A10"].Value = 100 .

엑셀 셀에 서식을 프로그램으로 적용할 수 있나요?

예, IronXL은 배경색( cell.Style.SetBackgroundColor("#FF0000") ), 테두리, 글꼴 및 숫자 서식을 포함한 포괄적인 서식 지정을 지원합니다.

C#에서 Excel 수식을 사용하는 방법은 무엇인가요?

IronXL의 Formula 속성을 사용하여 worksheet["A1"].Formula = "=SUM(B1:B10)" 와 같이 수식을 적용하거나 range.Sum() , range.Avg() 와 같은 내장 메서드를 사용할 수 있습니다.

엑셀 워크시트를 암호로 보호하려면 어떻게 해야 하나요?

IronXL에서 워크시트를 보호하려면 worksheet.ProtectSheet("YourPassword") 를 사용하여 무단 수정을 방지하십시오.

엑셀 파일의 인쇄 설정을 어떻게 구성하나요?

IronXL의 PrintSetup을 사용하여 인쇄 속성을 설정합니다. worksheet.PrintSetup.PrintOrientation = PrintOrientation.Landscapeworksheet.SetPrintArea("A1:Z100") .

엑셀 통합 문서를 여러 형식으로 저장하는 방법은 무엇인가요?

IronXL의 SaveAs 메서드를 사용하여 통합 문서를 저장하세요. XLSX 형식의 경우 workbook.SaveAs("file.xlsx") 사용하고, 다른 형식의 경우 SaveAsCsv() 또는 SaveAsJson() 사용하세요.

데이터베이스의 데이터를 엑셀 시트에 채우려면 어떻게 해야 하나요?

IronXL을 사용하여 데이터베이스에서 데이터를 가져와 worksheet["A1"].Value = dataFromDatabase 와 같은 메서드를 사용하여 셀에 설정함으로써 워크시트를 채울 수 있습니다.

C#을 사용하여 Excel 시트에서 창 고정 기능을 구현하려면 어떻게 해야 할까요?

IronXL을 사용하여 워크시트의 창을 고정하려면 worksheet.FreezePanes(1, 1) 사용하여 맨 위 행과 가장 왼쪽 열을 고정하여 탐색을 더 쉽게 할 수 있습니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

시작할 준비 되셨나요?
Nuget 다운로드 2,134,203 | 버전: 2026.7 방금 출시
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronXL.Excel
샘플을 실행하세요 데이터가 스프레드시트로 변환되는 것을 지켜보세요.