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

C#에서 GridView를 서식과 함께 Excel로 내보내는 방법

색상, 글꼴, 번갈아 배열된 행 배경 및 테두리를 유지하면서 GridView 데이터를 Excel로 내보내는 것은 거의 모든 데이터 중심 ASP.NET 또는 Windows Forms 애플리케이션에서 발생하는 요구 사항입니다. 전통적인 접근 방식 -- HtmlTextWriterStringWriter를 사용해 제어를 HTML로 렌더링 -- 은 Excel에서 형식 경고를 포함하는 파일을 생성하고 사용자에게 조용히 실패합니다. IronXL은 Microsoft Office 의존도 없이 완전히 C#으로 네이티브 XLSX 파일을 생성함으로써 이를 해결하여, 각 셀 스타일에 대한 정확한 제어를 제공합니다.

.NET 프로젝트에서 라이브러리를 설치하는 방법은?

IronXL을 NuGet에서 설치한 후 내보내기 코드를 작성하세요. 패키지 관리자 콘솔을 열고 다음을 실행하십시오:

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

IronXL은 .NET 8, .NET 9, .NET 10 및 .NET Framework 4.6.2 이상을 지원합니다. 설치 후, Excel 작업을 수행하는 파일에 다음 using 지시어를 추가하십시오:

using IronXL;
using IronXl.Styles;
using IronXL;
using IronXl.Styles;
$vbLabelText   $csharpLabel

추가 런타임이나 Office 인터롭은 필요하지 않습니다. 라이브러리는 Microsoft Excel, LibreOffice Calc 및 Google Sheets에서 깔끔하게 열리는 네이티브 XLSX 바이너리 파일을 작성합니다.

셀 서식과 함께 Windows Forms DataGridView를 Excel로 내보내는 방법은?

Windows Forms 애플리케이션은 웹 기반 GridView 대신 DataGridView 제어를 사용합니다. 두 경우의 내보내기 패턴은 동일합니다: 행과 셀에서 값을 추출하고, IronXL 통합 문서를 생성하여 스타일을 적용한 후 결과를 저장하거나 스트리밍합니다.

가장 신뢰할 수 있는 방법은 제어의 DataSource 속성을 DataTable로 캐스팅하여 필터링되거나 페이지화될 수 있는 시각적 행을 반복하지 않는 것입니다:

using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;

DataTable dt = (DataTable)dataGridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row -- bold, blue background, white text
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#4472C4");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.BottomBorder.Type = BorderType.Thin;
}

// Data rows -- alternating row color
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        string value = dt.Rows[row][col]?.ToString() ?? string.Empty;
        sheet.SetCellValue(row + 1, col, value);

        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#D6DCE5" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
    }
}

// Save via dialog
using var saveDialog = new SaveFileDialog
{
    Filter = "Excel Files|*.xlsx",
    FileName = "GridViewExport.xlsx"
};

if (saveDialog.ShowDialog() == DialogResult.OK)
{
    workBook.SaveAs(saveDialog.FileName);
    MessageBox.Show("Export successful.", "Export",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
}
using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;

DataTable dt = (DataTable)dataGridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row -- bold, blue background, white text
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#4472C4");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.BottomBorder.Type = BorderType.Thin;
}

// Data rows -- alternating row color
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        string value = dt.Rows[row][col]?.ToString() ?? string.Empty;
        sheet.SetCellValue(row + 1, col, value);

        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#D6DCE5" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
    }
}

// Save via dialog
using var saveDialog = new SaveFileDialog
{
    Filter = "Excel Files|*.xlsx",
    FileName = "GridViewExport.xlsx"
};

if (saveDialog.ShowDialog() == DialogResult.OK)
{
    workBook.SaveAs(saveDialog.FileName);
    MessageBox.Show("Export successful.", "Export",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
}
$vbLabelText   $csharpLabel

WorkBook.Create는 XLSX 형식의 메모리 내 새 통합 문서를 초기화합니다. DefaultWorkSheet는 첫 번째 시트를 반환하며, 저장하기 전에 그 Name 속성을 통해 이름을 변경할 수 있습니다. SetCellValue는 문자열, 정수, 실수 및 DateTime 값을 허용합니다 -- IronXL은 적절한 셀 유형을 자동으로 선택합니다.

교차 행 색상 패턴 -- row % 2 == 0#D6DCE5을 선택하고, 그렇지 않으면 #FFFFFF -- 은 Excel에 내장된 밴드 행 테이블 스타일을 반영합니다. 애플리케이션의 디자인 시스템과 일치하는 임의의 6자 헥스 색상으로 대체할 수 있습니다.

출력 이미지

IronXL을 사용해 C#의 서식이 있는 GridView를 Excel로 내보내기: 이미지 1 - GridView 출력

IronXL을 사용해 C#의 서식이 있는 GridView를 Excel로 내보내기: 이미지 2 - Excel 출력

IronXL을 사용해 C#의 서식이 있는 GridView를 Excel로 내보내기: 이미지 3 - 메시지 출력

ASP.NET GridView를 Excel로 내보내고 브라우저에 파일을 스트리밍하려면 어떻게 해야 하나요?

웹 애플리케이션은 다른 전달 메커니즘이 필요합니다. 파일 시스템에 쓰는 대신, 통합 문서를 MemoryStream로 직렬화하고 올바른 헤더와 함께 HTTP 응답에 쓰면 브라우저가 이를 파일 다운로드로 처리합니다.

페이지화된 GridView에 중요한 사전 준비 단계: 페이징을 비활성화(AllowPaging = false)하고 내보내기 전에 데이터 소스를 다시 연결해 현재 페이지 뿐 아니라 모든 레코드를 캡처합니다.

using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;
using System.Web.UI;

// Disable paging so all rows are captured
GridView1.AllowPaging = false;
GridView1.DataBind();

DataTable dt = (DataTable)GridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#2E75B6");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.HorizontalAlignment = HorizontalAlignment.Center;
    cell.Style.BottomBorder.Type = BorderType.Medium;
}

// Data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#DEEAF1" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
        cell.Style.LeftBorder.Type = BorderType.Thin;
        cell.Style.RightBorder.Type = BorderType.Thin;
    }
}

// Stream to browser
byte[] fileBytes = workBook.ToByteArray();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=GridViewExport.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;
using System.Web.UI;

// Disable paging so all rows are captured
GridView1.AllowPaging = false;
GridView1.DataBind();

DataTable dt = (DataTable)GridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#2E75B6");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.HorizontalAlignment = HorizontalAlignment.Center;
    cell.Style.BottomBorder.Type = BorderType.Medium;
}

// Data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#DEEAF1" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
        cell.Style.LeftBorder.Type = BorderType.Thin;
        cell.Style.RightBorder.Type = BorderType.Thin;
    }
}

// Stream to browser
byte[] fileBytes = workBook.ToByteArray();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=GridViewExport.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
$vbLabelText   $csharpLabel

Response.AddHeader와 함께 content-disposition: attachment은 모든 최신 브라우저에서 파일 다운로드 대화상자를 강제 호출합니다. MIME 유형 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet은 XLSX 파일의 등록된 유형이며 브라우저가 바이너리 콘텐츠를 인라인으로 표시하려고 시도하는 것을 방지합니다.

ASP.NET Core 애플리케이션의 경우 컨트롤러 작업에서 Response.BinaryWriteFile(fileBytes, contentType, fileName)로 교체하십시오 -- 통합 문서 생성 로직은 동일합니다.

셀 값에 따라 조건부 서식을 어떻게 적용하나요?

조건부 서식은 특정 기준을 만족하는 셀을 강조 표시합니다 - 예를 들어, 연체 날짜를 빨간색으로 표시하거나 임계값 아래의 값을 주황색으로 플래깅합니다. IronXL은 작업책 구성 시 셀 레벨에서 조건부 서식을 적용합니다:

// Assume "DueDate" is column index 3 and "Amount" is column index 4
DateTime today = DateTime.Today;

for (int row = 0; row < dt.Rows.Count; row++)
{
    // Highlight past-due dates
    if (dt.Columns.Contains("DueDate") && dt.Rows[row]["DueDate"] != DBNull.Value)
    {
        DateTime dueDate = Convert.ToDateTime(dt.Rows[row]["DueDate"]);
        var dueDateCell = sheet.GetCellAt(row + 1, 3);
        if (dueDate < today)
        {
            dueDateCell.Style.SetBackgroundColor("#FF0000");
            dueDateCell.Style.Font.Color = "#FFFFFF";
            dueDateCell.Style.Font.Bold = true;
        }
    }

    // Highlight amounts below threshold
    if (dt.Columns.Contains("Amount") && dt.Rows[row]["Amount"] != DBNull.Value)
    {
        decimal amount = Convert.ToDecimal(dt.Rows[row]["Amount"]);
        var amountCell = sheet.GetCellAt(row + 1, 4);
        if (amount < 100m)
        {
            amountCell.Style.SetBackgroundColor("#FFC000");
        }
    }
}
// Assume "DueDate" is column index 3 and "Amount" is column index 4
DateTime today = DateTime.Today;

for (int row = 0; row < dt.Rows.Count; row++)
{
    // Highlight past-due dates
    if (dt.Columns.Contains("DueDate") && dt.Rows[row]["DueDate"] != DBNull.Value)
    {
        DateTime dueDate = Convert.ToDateTime(dt.Rows[row]["DueDate"]);
        var dueDateCell = sheet.GetCellAt(row + 1, 3);
        if (dueDate < today)
        {
            dueDateCell.Style.SetBackgroundColor("#FF0000");
            dueDateCell.Style.Font.Color = "#FFFFFF";
            dueDateCell.Style.Font.Bold = true;
        }
    }

    // Highlight amounts below threshold
    if (dt.Columns.Contains("Amount") && dt.Rows[row]["Amount"] != DBNull.Value)
    {
        decimal amount = Convert.ToDecimal(dt.Rows[row]["Amount"]);
        var amountCell = sheet.GetCellAt(row + 1, 4);
        if (amount < 100m)
        {
            amountCell.Style.SetBackgroundColor("#FFC000");
        }
    }
}
$vbLabelText   $csharpLabel

이 패턴은 합성 가능하며, 보고 요구 사항에 따라 필요한 만큼의 조건부 검사를 추가할 수 있습니다. IronXL은 셀 단위로 작동하기 때문에, 기본 행 스타일 후에 조건부 스타일을 적용하여 교대 행 색상 논리와 조건부 서식을 혼합할 수 있습니다.

열 너비를 설정하고 헤더 행을 고정하려면 어떻게 하나요?

전문적으로 형식화된 Excel 내보내기에는 적절한 열 너비와 고정된 헤더 행이 포함되어야 하며, 사용자가 큰 데이터 세트를 스크롤할 때 열 이름이 계속 보입니다.

IronXL은 WorkSheet 열 접근자를 통해 열 너비를 노출하고 FreezeRows 메소드를 통해 헤더 고정을 노출합니다:

// Auto-size columns 0 through the last column index
for (int col = 0; col < dt.Columns.Count; col++)
{
    // Set column width in character units (1 unit ≈ one default character width)
    sheet.SetColumnWidth(col, 20);
}

// Freeze the first row (index 0) so the header stays visible while scrolling
sheet.FreezeRows(1);

// Optionally set row height for the header (in points)
sheet.SetRowHeight(0, 20);
// Auto-size columns 0 through the last column index
for (int col = 0; col < dt.Columns.Count; col++)
{
    // Set column width in character units (1 unit ≈ one default character width)
    sheet.SetColumnWidth(col, 20);
}

// Freeze the first row (index 0) so the header stays visible while scrolling
sheet.FreezeRows(1);

// Optionally set row height for the header (in points)
sheet.SetRowHeight(0, 20);
$vbLabelText   $csharpLabel

프로덕션 사용을 위해서는 고정 값을 사용하는 대신 각 열의 최대 문자 수를 기준으로 너비를 계산하는 것을 고려해야 합니다. DataTable 열 값을 반복하고, 문자열 길이를 측정한 후 선택한 글꼴 크기에 적합한 문자 너비 인수로 곱하십시오.

C#을 사용하여 Excel 셀에 배경색을 설정은 교대 색상 논리와 독립적으로 더 세분화된 스타일링 접근법을 적용할 수 있습니다.

GridView 컨트롤 없이 DataTable을 Excel로 내보내려면 어떻게 해야 하나요?

많은 .NET 애플리케이션은 서비스 호출 또는 데이터베이스 쿼리를 통해 데이터를 채우고 DataTable에 보관한 채로 UI 제어에 결합하지 않습니다. GridView를 전혀 인스턴스화하지 않고 DataTable를 직접 Excel로 내보낼 수 있습니다.

이는 백그라운드 작업, 예약 보고서 및 서버에서 Excel 파일을 생성해야 하는 API 엔드포인트에 가장 효율적인 경로입니다:

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

public static byte[] DataTableToExcelBytes(DataTable dt, string sheetName = "Report")
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.CreateWorkSheet(sheetName);

    // Header
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    // Data
    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    return workBook.ToByteArray();
}
using IronXL;
using IronXl.Styles;
using System.Data;

public static byte[] DataTableToExcelBytes(DataTable dt, string sheetName = "Report")
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.CreateWorkSheet(sheetName);

    // Header
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    // Data
    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    return workBook.ToByteArray();
}
$vbLabelText   $csharpLabel

이 방법은 디스크에 쓰거나, API 끝점에서 스트리밍하거나, 이메일에 첨부하거나, 메모리에 캐시할 수 있는 byte[]을 반환합니다. 관련 기술을 보려면 DataTable을 Excel로 내보내기 가이드와 DataTable을 Excel로 내보내는 가장 빠른 방법에 대한 튜토리얼을 참조하세요.

대량의 데이터 세트와 성능을 어떻게 처리하나요?

수십만 개의 행을 Excel로 내보내려면 메모리 할당에 주의해야 합니다. 큰 그리드에서 각 셀에 대해 새로운 셀 스타일 객체를 생성하는 것이 가장 일반적인 성능 병목 현상입니다. 스타일 정의를 가능한 범위 객체에 설정하여 개별 셀이 아닌 범위 객체에 스타일을 재사용하세요:

IronXL 데이터 세트 크기에 따른 내보내기 접근 방식
데이터 세트 크기 권장 접근 방식 주요 고려 사항
최대 5,000행 셀별 스타일링 루프 간단한 코드, 무시할 수 있는 오버헤드
5,000 -- 50,000행 범위 수준 스타일 적용 객체 할당을 상당히 줄입니다
50,000+ 행 DataTable 직접 내보내기, 최소 스타일링 셀별 작업을 최소화하고, 사용 가능하다면 스트리밍을 사용하세요.

페이지화된 GridView의 경우, 항상 AllowPaging = false을 설정하고 내보내기 전에 다시 연결하십시오. 페이징은 제어 내에서 보이는 행의 수를 제한하므로, 페이징된 내보내기는 전체 데이터셋이 아닌 현재 페이지만 캡처합니다 -- 이는 불완전한 내보내기 버그의 빈번한 원인입니다.

C#에서 객체 목록을 Excel로 내보내기에 대한 가이드를 검토하여 텍스트입력이 확실히 형식화된 컬렉션과 함께 작동하는 패턴을 보십시오.

ASP.NET Core 또는 Blazor에서 GridView를 내보내려면 어떻게 해야 합니까?

ASP.NET Core 및 Blazor 애플리케이션에는 Web Forms GridView 제어가 없지만, 기본 데이터 내보내기 문제는 동일합니다: 객체 콜렉션이나 DataTable을 가져와 스타일 통합 문서를 빌드한 후 파일로 제공합니다. 통합 문서 생성 코드는 동일합니다; 단지 전달 메커니즘만 변경됩니다.

Blazor 애플리케이션에서 JavaScript interop을 통해 파일 다운로드를 트리거하십시오:

// In a Blazor component or service
using IronXL;
using System.Data;
using Microsoft.JSInterop;

public async Task ExportToExcelAsync(DataTable dt, IJSRuntime js)
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.DefaultWorkSheet;

    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    byte[] fileBytes = workBook.ToByteArray();
    string base64 = Convert.ToBase64String(fileBytes);
    await js.InvokeVoidAsync("downloadFileFromBase64", base64, "GridViewExport.xlsx",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}
// In a Blazor component or service
using IronXL;
using System.Data;
using Microsoft.JSInterop;

public async Task ExportToExcelAsync(DataTable dt, IJSRuntime js)
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.DefaultWorkSheet;

    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    byte[] fileBytes = workBook.ToByteArray();
    string base64 = Convert.ToBase64String(fileBytes);
    await js.InvokeVoidAsync("downloadFileFromBase64", base64, "GridViewExport.xlsx",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}
$vbLabelText   $csharpLabel

Blazor 다운로드 패턴에 대한 전체 절차는 Blazor Excel 내보내기 튜토리얼에 있습니다. ASP.NET Core 컨트롤러 접근법에 대한 자세한 내용은 ASP.NET Core Excel 내보내기 튜토리얼을 참조하십시오.

폰트 스타일링 및 테두리 옵션

IronXL은 각 셀의 Style 객체를 통해 세밀한 글꼴 및 테두리 제어를 노출합니다. C#에서 사용할 수 있는 Excel 폰트 스타일의 전체 범위에는 굵게, 이탤릭, 밑줄, 크기 및 색상이 포함됩니다. BorderType을 통해 사용할 수 있는 테두리 유형은 얇은, 중간, 두꺼운, 대시, 점선, 이중 및 여러 헤어라인 변형을 포함합니다.

병합된 헤더 행이나 요약 푸터의 경우, IronXL은 C#을 사용하여 Excel에서 셀 병합을 지원합니다 -- 여러 열에 걸친 단일 제목 셀을 원할 때 유용합니다.

데이터를 채운 후 열 너비를 자동으로 맞추려면, C#을 사용하여 Excel에서 셀 자동 맞춤 가이드를 참조하여 추천 방법을 사용하십시오.

왜 네이티브 Excel 라이브러리가 HtmlTextWriter보다 깔끔한 내보내기를 생성합니까?

전통적인 ASP.NET 내보내기 기술 -- VerifyRenderingInServerForm을 오버라이드하고, StringWriterHtmlTextWriter을 생성하고 렌더링된 제어를 응답에 쓴 후 .xls 확장자가 있는 HTML 문서를 생성합니다. Microsoft Excel은 이러한 파일을 실제로 Excel 바이너리 또는 OOXML 형식이 아니기 때문에 호환성 경고와 함께 엽니다. 스타일은 Excel이 부분적으로 해석하는 인라인 CSS로 제한됩니다. 조건부 서식은 불가능합니다. 비-Windows 플랫폼에서 사용하거나 LibreOffice를 사용하는 사용자는 열화된 출력을 봅니다.

IronXL은 Open XML 스프레드시트 형식(OOXML)을 직접 작성합니다. 결과는 제대로 된 .xlsx 파일로서 Excel 자체가 생성하는 것과 동일하며 Excel, LibreOffice, Google Sheets 및 macOS의 Numbers에서 경고 없이 열립니다. 서식은 HTML 속성이 아닌 스프레드시트 스타일로 인코딩되므로 원활하게 왕복 및 플랫폼 간 보기에서 유지됩니다.

ASP.NET GridView 내보내기 방법 비교
메서드 파일 형식 형식 경고 전체 스타일 지원 Office 필수
HtmlTextWriter + StringWriter XLS로 위장한 HTML 아니요 아니요
Office Interop (COM) 네이티브 XLS/XLSX 아니요
IronXL 네이티브 XLSX/XLS 아니요 아니요

Microsoft의 Open XML SDK 공식 문서에서는 IronXL이 생성하는 기본 형식을 설명합니다. ECMA International이 유지하는 OOXML 사양은 응용 프로그램 간 호환성을 보장하는 표준을 정의합니다. Microsoft Docs의 ASP.NET GridView 제어 문서는 상기 내보내기 패턴에서 읽는 제어 모델을 설명합니다.

다음 단계는 무엇입니까?

이제 Windows Forms, ASP.NET Web Forms, ASP.NET Core 및 Blazor 전송 모델을 포함하여 적절하게 포맷된 XLSX 파일로 GridView 및 DataGridView 데이터를 내보내는 데 필요한 패턴을 갖추었습니다.

더 나아가려면:

자주 묻는 질문

C#에서 GridView 데이터를 Excel로 내보내는 방법은 무엇인가요?

IronXL 라이브러리를 사용하면 C#에서 GridView 데이터를 Excel로 내보낼 수 있습니다. 이 라이브러리를 사용하면 서식과 스타일을 포함하여 데이터를 간편하게 Excel 파일로 생성하고 내보낼 수 있습니다.

GridView 데이터를 내보낼 때 IronXL 사용해야 하는 이유는 무엇인가요?

IronXL 직관적인 API를 통해 GridView 데이터 내보내기 프로세스를 간소화하여 서식을 유지하고 스타일을 손쉽게 적용할 수 있도록 지원합니다. 이는 기존 방식으로는 어려웠던 부분입니다.

IronXL GridView를 Excel로 내보낼 때 서식 유지를 지원합니까?

네, IronXL 글꼴, 색상, 셀 스타일을 포함한 다양한 서식 옵션을 지원하여 내보낸 Excel 파일이 전문적인 모양을 유지하고 의도한 디자인을 그대로 반영하도록 합니다.

GridView 데이터를 기반으로 생성된 Excel 파일의 모양을 사용자 지정할 수 있나요?

IronXL Excel 파일에 대한 다양한 사용자 지정 옵션을 제공하여 GridView에서 내보낼 때 특정 요구 사항에 맞게 셀 스타일, 글꼴, 색상 등을 조정할 수 있습니다.

IronXL 사용하여 대용량 GridView 데이터셋을 Excel로 내보낼 수 있습니까?

IronXL 대규모 데이터 세트를 효율적으로 처리할 수 있어 성능 문제 없이 방대한 GridView 데이터를 Excel로 내보낼 수 있습니다.

IronXL 사용하여 GridView 데이터를 Excel로 내보낼 때 다른 방법에 비해 어떤 이점이 있습니까?

IronXL GridView 데이터 내보내기에 있어 더욱 간소화되고 유연한 접근 방식을 제공하며, 서식 지정, 사용자 지정 및 대규모 데이터 세트 처리에 대한 강력한 지원을 제공하여 다른 많은 방법보다 우수합니다.

GridView를 Excel로 내보낼 때 데이터 무결성을 유지하려면 어떻게 해야 하나요?

IronXL GridView에서 Excel로 내보내는 과정에서 데이터 유형과 형식을 정확하게 변환하고 유지함으로써 데이터 무결성을 보장합니다.

IronXL 복잡한 구조를 가진 GridView 컨트롤에서 데이터를 내보낼 수 있습니까?

예, IronXL 복잡한 구조를 가진 GridView 컨트롤의 데이터를 효과적으로 처리하고 내보낼 수 있으며, 결과 Excel 파일에서 계층 구조와 서식을 유지합니다.

IronXL GridView 데이터를 어떤 파일 형식으로 내보낼 수 있습니까?

IronXL 주로 XLSX와 같은 Excel 형식으로 데이터를 내보내지만 CSV와 같은 다른 형식도 지원하므로 필요에 따라 유연하게 사용할 수 있습니다.

IronXL 에서 조건부 서식이 적용된 GridView를 내보내는 기능이 지원되나요?

IronXL 조건부 서식을 지원하므로 GridView 데이터를 Excel로 내보낼 때 셀 값에 따라 동적으로 조정되는 규칙과 스타일을 설정할 수 있습니다.

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

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

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

Iron Support Team

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