IRONSOFTWAREHOME
IRONXL 사용하여

IronXL 사용하여 C#에서 DataGridView를 Excel로 내보내는 방법

Curtis Chau
Curtis Chau
Updated: 2026년 6월 28일

IronXL을 사용하면 DataGridView에서 Excel 파일로 데이터를 내보내는 데는 몇 줄의 C# 코드만 필요합니다. IronXL를 사용해 보세요. WorkBook을(를) 생성하고, 그리드의 열과 행을 반복하며 각 셀의 값을 워크시트에 씁니다. 그런 다음 SaveAs을 호출하여 완전히 형식화된 .xlsx 파일을 생성합니다. Microsoft Office 설치가 필요 없습니다.

Excel 내보내기를 위한 Windows Forms 프로젝트를 어떻게 설정하나요?

Windows Forms는 .NET 생태계의 기본 GUI 라이브러리로, 데스크톱 애플리케이션을 구축하는 데 널리 사용됩니다. DataGridView 컨트롤은 가장 많이 사용되는 구성 요소 중 하나입니다. DataTable, 데이터베이스 쿼리 결과 또는 메모리 내 목록과 같은 바인딩 가능한 소스에서 표 형식 데이터를 표시, 편집 및 관리합니다.

그리드 데이터를 Excel로 내보내는 것은 이해관계자에게 보고서를 보내거나, 감사용으로 스냅샷을 보관하거나, 하위 분석 도구에 데이터를 입력하라는 일상적인 요구를 충족시킵니다. 전통적인 접근 방식 두 가지는 Microsoft 오피스 상호 운용과 서드 파티 라이브러리입니다. Interop은 응용 프로그램을 실행하는 모든 컴퓨터에 Excel의 사본을 설치해야 하고, COM 객체 생명 주기 문제를 일으키며, 서버나 클라우드 배포에서 성능이 떨어집니다. IronXL, ClosedXML, Syncfusion과 같은 라이브러리는 Office 의존성 없이 Open XML 파일 포맷에 직접 쓰기를 통해 이러한 문제를 재회피합니다.

이 가이드에서는 C#에서 .NET 10을 타겟으로 IronXL 접근 방식을 보여드리지만, IronXL은 .NET Framework 4.6.2와 모든 최신 .NET 버전을 지원합니다.

필수 조건

모든 내보내기 코드를 작성하기 전에 다음 사항을 확인하십시오:

  • Visual Studio 2022 이상
  • .NET 10 SDK 설치됨
  • DataGridView 컨트롤을 포함하는 Windows Forms App 프로젝트
  • IronXL 설치를 위한 NuGet 액세스

IronXL은 어떻게 설치합니까?

Visual Studio에서 패키지 관리자 콘솔을 열고 아래 명령어 중 하나를 실행합니다:

PM > Install-Package IronXL.Excel

또는 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하여 NuGet 패키지 관리를 선택하고 IronXL.Excel을 찾아 설치를 클릭하십시오.

VB .NET 2010에서 IronXL을 사용하여 DataGridView에서 Excel로 데이터 내보내기: 이미지 1 - 설치

설치가 완료되면 Excel 기능을 사용하는 모든 파일의 상단에 IronXL using 지시문을 추가하세요:

using IronXL;
using System.Data;

IronXL은 모든 일반 스프레드시트 형식을 지원합니다: XLSX, XLS, CSV, TSV. 이 가이드는 최신 Excel 버전의 기본 형식이기 때문에 전체적으로 XLSX를 사용합니다.

샘플 데이터로 DataGridView를 어떻게 채우나요?

이 연습을 위해, 양식에는 DataGridView라는 DataGridView1btnExport라는 버튼이 포함되어 있습니다. 그리드는 양식의 Load 이벤트에서 DataTable에 저장된 직원 레코드로 채워집니다:

void Form1_Load(object sender, EventArgs e)
{
    var dt = new DataTable();

    // Define columns with the appropriate .NET type
    dt.Columns.Add("EmployeeID", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Department", typeof(string));
    dt.Columns.Add("Salary", typeof(decimal));

    // Add sample rows
    dt.Rows.Add(101, "Sarah Johnson", "Engineering", 85000m);
    dt.Rows.Add(102, "Michael Chen", "Marketing", 72000m);
    dt.Rows.Add(103, "Emily Davis", "Finance", 91000m);
    dt.Rows.Add(104, "James Wilson", "Engineering", 78000m);

    DataGridView1.DataSource = dt;
}

각 열은 특정 .NET 타입으로 정의되어 이후에 숫자 비교 및 서식이 올바르게 작동하도록 합니다. DataSource 속성은 DataTable을(를) DataGridView에 직접 바인딩하며, 양식이 열릴 때 그리드는 모든 행을 자동으로 렌더링합니다. 실제 제작 환경에서는 이 데이터가 일반적으로 데이터베이스 쿼리, ORM 결과 세트 또는 REST API 응답에서 제공되며 하드코딩된 값은 아닙니다.

VB .NET 2010에서 IronXL을 사용하여 DataGridView에서 Excel로 데이터 내보내기: 이미지 2 - DataGridView 출력

DataGridView 데이터 모델 이해하기

DataGridView은(는) 두 개의 컬렉션을 통해 자신의 콘텐츠를 노출합니다: Columns (예: HeaderText 및 열 인덱스와 같은 메타데이터용) 및 Rows (실제 데이터 셀용). 각 DataGridViewRow에는 열 위치별로 인덱싱된 Cells 컬렉션이 포함되어 있습니다. 각 셀의 Value 속성은 박스화된 객체를 반환하므로, Excel 셀에 쓰기 전에 캐스트하거나 변환해야 합니다. 이 계층 구조를 이해하는 것은 신뢰할 수 있는 내보내기 루프 작성에 필수적입니다.

장면 뒤에서 DataTable은(는) 입력된 값을 저장하므로, 십진수 급여는 IronXL 워크시트에 쓰기 전에 문자열로 변환할 필요가 없습니다. IronXL의 SetCellValue 메서드는 string, double, decimal, int, boolDateTime 오버로드를 허용하여 출력 파일에서 원래 데이터 유형을 유지하도록 합니다.

열 헤더와 함께 DataGridView 데이터를 Excel 파일로 어떻게 내보내나요?

내보내기 로직은 버튼의 클릭 핸들러 내부에 있습니다. 코드는 새로운 WorkBook을 생성하고 기본 워크시트를 검색하며 열 제목을 첫 번째 행에 쓰고 그런 다음 각 데이터 행을 그 아래에 씁니다:

void btnExport_Click(object sender, EventArgs e)
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

    // Write column headers to row index 0
    for (int col = 0; col < DataGridView1.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText);
    }

    // Write data rows starting at row index 1
    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cellValue = DataGridView1.Rows[row].Cells[col].Value;
            if (cellValue is not null)
            {
                sheet.SetCellValue(row + 1, col, cellValue.ToString()!);
            }
        }
    }

    string outputPath = "EmployeeData.xlsx";
    workbook.SaveAs(outputPath);
    MessageBox.Show("Export complete. File saved to: " + outputPath, "Success");
}

WorkBook 객체는 메모리 내에 있는 전체 Excel 파일을 나타냅니다. DefaultWorkSheet 은(는) 명시적으로 하나를 생성하지 않아도 첫 번째 시트를 반환합니다. 외부 루프는 HeaderText에서 헤더 텍스트를 읽어 0행에 씁니다. 내부 루프는 각 데이터 행을 반복한 후 변환하기 전에 셀 값이 널인지 확인합니다. row + 1 오프셋은 데이터가 헤더 행 아래로 이동합니다. SaveAs은(는) 완성된 워크북을 지정된 경로에 Open XML XLSX 파일로 작성합니다.

VB .NET 2010에서 IronXL을 사용하여 DataGridView에서 Excel로 데이터 내보내기: 이미지 3 - Excel 출력

결과 파일은 Excel, Google Sheets 또는 XLSX 포맷을 읽을 수 있는 모든 애플리케이션에서 열립니다. 열 제목은 첫 번째 행에 나타나고 모든 데이터 행은 DataGridView에 나타난 순서대로 따라옵니다.

내보낸 Excel 파일에 셀 서식을 어떻게 적용하나요?

일반 데이터 덤프는 기능적이지만, 프레젠테이션 준비가 되지 않습니다. IronXL의 스타일링 API를 사용하면 저장하기 전에 굵은 글꼴, 배경색, 텍스트 색상 및 숫자 서식을 다양한 셀 범위에 적용할 수 있습니다.

void ExportWithFormatting()
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

    // Write column headers
    for (int col = 0; col < DataGridView1.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText);
    }

    // Style the header row: bold white text on blue background
    var headerRange = sheet.GetRange("A1:D1");
    headerRange.Style.Font.Bold = true;
    headerRange.Style.SetBackgroundColor("#4472C4");
    headerRange.Style.Font.SetColor("#FFFFFF");

    // Locate the Salary column index
    int salaryColIndex = -1;
    for (int i = 0; i < DataGridView1.Columns.Count; i++)
    {
        if (string.Equals(DataGridView1.Columns[i].HeaderText, "Salary",
            StringComparison.OrdinalIgnoreCase))
        {
            salaryColIndex = i;
            break;
        }
    }

    // Write data rows, preserving numeric types
    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        if (DataGridView1.Rows[row].IsNewRow) continue;

        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cellValue = DataGridView1.Rows[row].Cells[col].Value;
            if (cellValue is null) continue;

            int targetRow = row + 1;

            if (col == salaryColIndex)
            {
                // Write salary as a true numeric decimal
                if (decimal.TryParse(cellValue.ToString(),
                    System.Globalization.NumberStyles.Number,
                    System.Globalization.CultureInfo.InvariantCulture,
                    out decimal decValue))
                {
                    sheet.SetCellValue(targetRow, col, decValue);
                }
                else
                {
                    sheet.SetCellValue(targetRow, col, cellValue.ToString()!);
                }
            }
            else
            {
                sheet.SetCellValue(targetRow, col, cellValue.ToString()!);
            }
        }
    }

    // Apply currency format to the salary column data range
    var salaryRange = sheet.GetRange("D2:D5");
    salaryRange.FormatString = "$#,##0";

    workbook.SaveAs("FormattedEmployeeData.xlsx");
}

GetRange 메서드는 연속된 블록의 셀을 선택하기 위해 표준 Excel 표기법(A1:D1)을 허용합니다. Style.Font.Bold, Style.SetBackgroundColorStyle.Font.SetColor을 설정하면 선택된 범위의 모든 셀에 해당 형식을 적용합니다. 숫자 열의 경우 값이 문자열이 아닌 decimal로 작성되면 데이터 유형이 그대로 유지되므로 Excel이 $#,##0와 같은 숫자 형식을 올바르게 적용할 수 있습니다. 문자열로 저장된 셀은 숫자 형식 코드에 반응하지 않습니다.

VB .NET 2010에서 IronXL을 사용하여 DataGridView에서 Excel로 데이터 내보내기: 이미지 4 - 형식화된 Excel 출력

이 패턴을 확장하여 교대 행 음영 적용, 열 너비 자동 조정 또는 창 고정을 수행하려면 IronXL 스타일 문서를 참조하십시오.

DataGridView 데이터를 XLSX 대신 CSV로 내보내는 방법은?

일부 워크플로는 오래된 시스템 또는 경량 데이터 파이프라인과의 호환성을 위해 CSV 출력이 필요합니다. IronXL은 주 코드에 대한 추가 구성 변경 없이 CSV 출력을 처리합니다:

void ExportToCsv()
{
    var workbook = WorkBook.Create();
    var sheet = workbook.DefaultWorkSheet;

    for (int col = 0; col < DataGridView1.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, DataGridView1.Columns[col].HeaderText);
    }

    for (int row = 0; row < DataGridView1.Rows.Count; row++)
    {
        if (DataGridView1.Rows[row].IsNewRow) continue;

        for (int col = 0; col < DataGridView1.Columns.Count; col++)
        {
            object? cell = DataGridView1.Rows[row].Cells[col].Value;
            if (cell is not null)
                sheet.SetCellValue(row + 1, col, cell.ToString()!);
        }
    }

    // Saving with a .csv extension produces a comma-separated file
    workbook.SaveAs("EmployeeData.csv");
}

XLSX 내보내기에서의 유일한 변화는 SaveAs에 전달된 파일 확장자입니다. IronXL은 확장자를 감지하고 자동으로 올바른 형식으로 워크북을 직렬화합니다. 이 일관성 덕분에 출력 형식에 관계없이 데이터 쓰기 논리가 동일하게 유지되며, 이는 각 형식에 대해 별도의 코드 경로가 필요한 라이브러리에 비해 큰 장점입니다.

CSV 내보내기는 Python pandas 스크립트, 대량 데이터베이스 가져오기 도구, 또는 이진 XLSX 파일을 읽지 못하는 분석 플랫폼과 같은 후속 소비자가 있을 때 특히 유용합니다.

대용량 DataGridView 데이터셋을 효율적으로 처리하는 방법은?

수십 수천 개의 행이 포함된 그리드의 경우 성능이 고려 사항이 됩니다. 다음 패턴은 전체 데이터셋을 한 번에 구성하여 메모리 압력을 줄입니다:

대용량 데이터셋에 대한 IronXL 내보내기 방법 비교
접근 방식처리된 행오피스 필요유형 보존
Microsoft.Office.Interop.Excel~65k까지(느림)부분적
IronXL(문자열 셀)100만+ 행아니요아니요(모두 텍스트)
IronXL(유형화된 셀)100만+ 행아니요
DataTable에서 IronXL로100만+ 행아니요네(자동)

DataGridView이(가) DataTable에 바인딩되면, WorkSheet.LoadDataTable 메서드를 사용하여 테이블을 IronXL에 직접 로드하여 셀 단위 반복을 완전히 우회할 수 있습니다. 이 접근 방식은 더 빠르고 모든 열 유형을 자동으로 보존합니다.

DataTable에 의해 지원되지 않는 그리드의 경우, 이전에 보여준 셀 단위 패턴이 표준 접근 방식으로 남아 있습니다. 대량 내보내기 동안 UI를 응답 상태로 유지하기 위해 비동기 내보내기가 필요한 경우, 내보내기 로직을 Task.Run 호출로 감싸고 결과를 백그라운드 스레드에서 await합니다. UI 스레드로 결과를 다시 마샬링하는 패턴에 대한 문서는 비동기 파일 작업 문서를 참조하십시오.

DataGridView 내보내기에 IronXL이 오피스 상호 운용보다 나은 이유는 무엇입니까?

전통적인 .NET 솔루션은 실행 중인 Excel 프로세스를 구동하기 위해 Microsoft.Office.Interop.Excel을 사용했습니다. 해당 접근 방식은 여러 배포 및 신뢰성 문제를 만듭니다:

  • 애플리케이션을 실행하는 모든 컴퓨터에 Microsoft Excel의 라이선스된 복사본이 설치되어야 합니다.
  • 서버 환경과 클라우드 컨테이너는 일반적으로 Office를 설치할 수 없습니다.
  • COM Interop은 메모리 누수 및 엑셀 좀비 프로세스를 피하기 위해 모든 객체의 명시적인 해제가 필요합니다.
  • COM 경계를 통한 오류 처리는 장황하고 불안정합니다.
  • 행 수가 증가함에 따라 성능이 빠르게 저하됩니다.

IronXL은 외부 프로세스를 실행하지 않고 OOXML 파일 형식에 직접 씁니다. 애플리케이션은 자체 포함된 단위로 배포됩니다. 라이브러리의 API는 완전히 관리되는 .NET이므로, Marshal.ReleaseComObject 호출 없이 자동으로 메모리를 처리하는 가비지 컬렉션이 있습니다. 프로세스 간 통신이 발생하지 않기 때문에 속도가 상당히 빠릅니다.

대안을 평가하는 팀을 위해, ClosedXML은 인기 있는 오픈 소스 옵션입니다. IronXL은 PDF 변환, 차트 생성 및 상업 지원을 포함한 광범위한 기능 세트를 제공하므로, 이는 기업 조달 결정에서 중요한 요소가 될 수 있습니다. 팀 크기 및 배포 시나리오에 맞는 적절한 계층에 맞추려면 IronXL 라이선스 옵션을 검토하십시오.

기능 비교: IronXL vs 오피스 상호 운용
특징IronXL오피스 상호 운용
Office 설치 필요아니요
서버/클라우드 배포아니요(지원되지 않음)
관리된 메모리 모델아니오 (COM 정리 필요)
XLSX / CSV / XLS 형식모두 세 가지설치된 Excel에 따라 다름
스프레드시트에서 PDF 내보내기추가 라이브러리가 필요합니다

IronXL 튜토리얼 섹션에서는 기존 Excel 파일 읽기, 템플릿 수정, 차트 생성 및 조건부 서식을 적용하는 방법을 다룹니다. 이는 여기에서 보여지는 DataGridView 내보내기 패턴에서 자연스럽게 확장되는 모든 기능입니다.

다음 단계는 무엇입니까?

이제 IronXL을 사용하여 포맷된 Excel 파일로 DataGridView을(를) 내보내는 작동하는 C# 코드를 가지고 있습니다. 여기에서 다음 방향을 고려하십시오:

  • 오류 처리 추가: 내보내기 코드를 try/catch 블록으로 감싸고 파일이 잠겨 있거나 경로가 잘못되었을 때 사용자 친화적인 메시지를 표시합니다.
  • 파일 경로 선택 지원: 실행 시 사용자가 출력 위치 및 파일 이름을 선택할 수 있도록 SaveFileDialog을 사용하십시오.
  • 실제 데이터 로드: ADO.NET 또는 Entity Framework를 사용하여 예제 DataTable을 데이터베이스 쿼리로 대체하십시오.
  • 기존 파일 읽기: WorkBook.Load를 사용하여 기존 스프레드시트를 열고 항상 새로운 것을 생성하지 않고 업데이트하십시오
  • 여러 시트로 내보내기: 관련 데이터 집합을 정리하기 위해 동일한 WorkBook에 추가 WorkSheet 객체를 생성하십시오.
  • 조건부 서식 적용: IronXL의 조건부 서식 API를 사용하여 임계값을 초과하는 셀을 강조합니다
  • 라이선스 옵션 검토: 무료 체험판을 사용할 수 있습니다; 라이선스 티어는 개인 개발자부터 Enterprise 배포까지 포함합니다
  • 전체 API 참조 탐색: IronXL 개체 참조에는 사용 가능한 모든 클래스 및 메서드가 문서화되어 있습니다
Curtis Chau
기술 문서 작성자

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

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.