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

C#에서 템플릿을 내보내는 방법

Microsoft Excel 템플릿을 사용하면 보고서 생성 시 형식, 수식, 레이아웃을 유지하면서 데이터를 동적으로 채워주기 때문에 효율적입니다. 이 튜토리얼은 IronXL을 사용하여 Microsoft Office 종속성이나 Excel Interop 없이 기존 Excel 워크시트 템플릿에 데이터를 효율적으로 내보내는 방법을 보여줍니다. 다음 예제는 Excel 템플릿에 데이터를 작성하고 전문 Excel 시트 출력을 생성하는 방법을 보여줍니다. Microsoft Office가 설치되지 않은 상태에서 이미 존재하는 Excel 템플릿으로 C# 내보내기를 찾고 있다고 가정해 봅시다. 이 경우 이 Excel 라이브러리는 데이터 집합 객체를 포함한 다양한 소스에서 데이터를 삽입할 수 있는 더 고급 기능과 함께 깨끗하고 고성능의 솔루션을 제공합니다.

Excel 작업북 외에도 IronXL은 XML 파일과 같은 다른 데이터 교환 형식과 잘 통합되어 개발자가 데이터를 가져오고 내보내거나 시스템 간 구조화된 데이터를 쉽게 변환할 수 있도록 합니다. 데이터베이스나 시스템 파일에서 Excel에 데이터를 작성해야 하는 경우 이 라이브러리는 .NET 응용 프로그램과의 원활한 통합을 지원합니다.

C#에서 템플릿을 내보내는 방법: 그림 1

데이터 내보내기에 Excel 템플릿을 사용하는 이유는 무엇입니까?

Excel 템플릿은 처음부터 스프레드시트를 만드는 것보다 상당한 이점을 제공합니다. 템플릿은 전문적인 형식, 복잡한 수식, 조건부 서식 규칙, 유효한 데이터 구조를 유지합니다. 조직은 종종 송장, 보고서 및 대시보드에 대한 표준 템플릿을 가지고 있으며, 이러한 템플릿은 데이터베이스, API 또는 데이터 테이블과 같은 수집 객체에서 동적 데이터를 통합하면서 디자인을 유지해야 합니다. 조건부 서식 및 셀 서식을 출력 파일에 적용할 때 템플릿은 xlsx 형식으로 생성된 모든 문서의 일관성을 보장합니다.

기존 템플릿을 프로그래밍 방식으로 채우면 개발자는 수많은 형식 작업 시간을 절약하고 생성된 모든 문서의 일관성을 보장합니다. IronXL은 이 프로세스를 원활하게 처리하여 Office 설치 없이 XLSX, XLS 파일, XLSM 및 XLTX 템플릿을 포함한 다양한 Excel 형식을 지원합니다. 이 작업의 소스 코드는 모든 프로젝트 폴더에서 쉽게 구현할 수 있도록 간단하고 이해하기 쉽습니다.

C#에서 템플릿을 내보내는 방법: 그림 2

템플릿 작업을 위한 IronXL 설정

NuGet 패키지 관리자에서 IronXL을 설치하여 시작하세요. 패키지 관리자 콘솔을 열고 다음 명령을 실행하세요:

Install-Package IronXl.Excel

C#에서 템플릿을 내보내는 방법: 그림 3

설치 후 필요한 네임스페이스를 C# 파일에 추가하세요:

using IronXL;
using IronXL;
$vbLabelText   $csharpLabel

IronXL은 Microsoft Office 설치가 필요하지 않아 서버 환경 및 Docker 컨테이너 및 클라우드 플랫폼을 포함한 크로스 플랫폼 애플리케이션에 이상적입니다. 자세한 설정 지침 및 추가 정보는 IronXL 시작 안내서를 방문하세요. 도서관은 Windows, Linux 및 macOS 환경에서 .NET Framework, .NET Core 및 .NET 5+를 지원하므로 .NET 응용 프로그램에 적합합니다.

C#에서 템플릿을 내보내는 방법: 그림 4 - 기능

Excel 템플릿 로딩 및 채우기

WorkBook.Load() 메서드를 사용하면 기존 템플릿을 IronXL으로 쉽게 로드할 수 있습니다. 다음 예제는 템플릿을 열고 데이터를 채우는 방법을 보여줍니다. 첫 번째 행을 헤더로 처리하고 열 이름을 효과적으로 관리합니다:

// Load the existing Excel template for data import
WorkBook workbook = WorkBook.Load("ReportTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Populate specific worksheet cells with data
sheet["B2"].Value = "Q4 2024 Sales Report";
sheet["C4"].StringValue = DateTime.Now.ToString("MMMM dd, yyyy");
sheet["C6"].DecimalValue = 125000.50m;
sheet["C7"].DecimalValue = 98500.75m;
sheet["C8"].Formula = "=C6-C7"; // Profit calculation
// Populate a range with array data
decimal[] monthlyData = { 10500, 12300, 15600, 11200 };
for (int i = 0; i < monthlyData.Length; i++)
{
    sheet[$"E{10 + i}"].DecimalValue = monthlyData[i];
}
// Save the populated template
workbook.SaveAs("Q4_Sales_Report.xlsx");
// Load the existing Excel template for data import
WorkBook workbook = WorkBook.Load("ReportTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Populate specific worksheet cells with data
sheet["B2"].Value = "Q4 2024 Sales Report";
sheet["C4"].StringValue = DateTime.Now.ToString("MMMM dd, yyyy");
sheet["C6"].DecimalValue = 125000.50m;
sheet["C7"].DecimalValue = 98500.75m;
sheet["C8"].Formula = "=C6-C7"; // Profit calculation
// Populate a range with array data
decimal[] monthlyData = { 10500, 12300, 15600, 11200 };
for (int i = 0; i < monthlyData.Length; i++)
{
    sheet[$"E{10 + i}"].DecimalValue = monthlyData[i];
}
// Save the populated template
workbook.SaveAs("Q4_Sales_Report.xlsx");
$vbLabelText   $csharpLabel

이 코드는 미리 설계된 템플릿을 로드하고 모든 기존 형식을 유지하면서 특정 셀에 새 데이터를 채웁니다. DecimalValue 속성은 숫자 데이터가 올바른 형식을 유지하도록 보장합니다. 인접 데이터가 변경될 때 수식 셀은 자동으로 재계산되어 템플릿의 계산 논리를 보존합니다. IronXL에서 Excel 수식 작업에 대한 자세한 정보를 알아보세요.

입력

C#에서 템플릿을 내보내는 방법: 그림 5 - 샘플 템플릿 입력

산출

C#에서 템플릿을 내보내는 방법: 그림 6 - 엑셀 템플릿 출력 로드

템플릿 자리 표시자 작업

많은 템플릿이 실제 데이터로 대체해야 하는 자리 표시자 텍스트 마커를 사용합니다. IronXL은 셀 반복 및 텍스트 교체를 통해 이 시나리오를 효율적으로 처리합니다. Excel 템플릿에 데이터를 작성하고 동적 콘텐츠를 삽입해야 할 때 이 접근 방식은 최대의 유연성을 제공합니다:

// Load template with placeholders
WorkBook workbook = WorkBook.Load("InvoiceTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Find and replace placeholder text in cells
foreach (var cell in sheet["A1:H50"])
{
    if (cell.Text.Contains("{{CustomerName}}"))
        cell.Value = cell.Text.Replace("{{CustomerName}}", "Acme Corporation");
    if (cell.Text.Contains("{{InvoiceDate}}"))
        cell.Value = cell.Text.Replace("{{InvoiceDate}}", DateTime.Now.ToShortDateString());
    if (cell.Text.Contains("{{InvoiceNumber}}"))
        cell.Value = cell.Text.Replace("{{InvoiceNumber}}", "INV-2024-001");
}
// Populate line items dynamically
var items = new[] {
    new { Description = "Software License", Qty = 5, Price = 299.99 },
    new { Description = "Support Package", Qty = 1, Price = 999.99 }
};
int startRow = 15;
foreach (var item in items)
{
    sheet[$"B{startRow}"].Value = item.Description;
    sheet[$"E{startRow}"].IntValue = item.Qty;
    sheet[$"F{startRow}"].DoubleValue = item.Price;
    sheet[$"G{startRow}"].Formula = $"=E{startRow}*F{startRow}";
    startRow++;
}
workbook.SaveAs("GeneratedInvoice.xlsx");
// Load template with placeholders
WorkBook workbook = WorkBook.Load("InvoiceTemplate.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Find and replace placeholder text in cells
foreach (var cell in sheet["A1:H50"])
{
    if (cell.Text.Contains("{{CustomerName}}"))
        cell.Value = cell.Text.Replace("{{CustomerName}}", "Acme Corporation");
    if (cell.Text.Contains("{{InvoiceDate}}"))
        cell.Value = cell.Text.Replace("{{InvoiceDate}}", DateTime.Now.ToShortDateString());
    if (cell.Text.Contains("{{InvoiceNumber}}"))
        cell.Value = cell.Text.Replace("{{InvoiceNumber}}", "INV-2024-001");
}
// Populate line items dynamically
var items = new[] {
    new { Description = "Software License", Qty = 5, Price = 299.99 },
    new { Description = "Support Package", Qty = 1, Price = 999.99 }
};
int startRow = 15;
foreach (var item in items)
{
    sheet[$"B{startRow}"].Value = item.Description;
    sheet[$"E{startRow}"].IntValue = item.Qty;
    sheet[$"F{startRow}"].DoubleValue = item.Price;
    sheet[$"G{startRow}"].Formula = $"=E{startRow}*F{startRow}";
    startRow++;
}
workbook.SaveAs("GeneratedInvoice.xlsx");
$vbLabelText   $csharpLabel

이 접근 방식은 지정된 범위 내에서 자리 표시자 마커를 검색하고 실제 값으로 대체합니다. 폰트, 색상, 테두리를 포함한 템플릿의 형식은 전체 프로세스 동안 그대로 유지됩니다. 더 고급 시나리오의 경우 필요에 따라 형식을 동적으로 수정할 수 있는 IronXL의 셀 스타일링 옵션을 탐색하세요.

실제 구현 예

기존의 엑셀 템플릿에서 미리 서식이 지정된 셀로 월간 판매 보고서를 생성하는 완전한 예제입니다. 이 코드는 개체 발신자 이벤트를 처리하고 포괄적인 보고서를 작성하는 방법을 보여줍니다. 시스템 데이터베이스 또는 메모리 내 컬렉션의 데이터를 다룰 때, 닷넷 사용자 정의 테이블 또는 기존 데이터 세트를 사용하여 효율적으로 템플릿을 채우기 위해 데이터를 엑셀로 내보낼 수 있습니다:

public void GenerateMonthlyReport(string templatePath, Dictionary<string, decimal> salesData)
{
    // Load the existing template file
    WorkBook workbook = WorkBook.Load(templatePath);
    WorkSheet sheet = workbook.GetWorkSheet("Monthly Report");
    // Set report header information
    sheet["B2"].Value = $"Sales Report - {DateTime.Now:MMMM yyyy}";
    sheet["B3"].Value = $"Generated: {DateTime.Now:g}";
    // Populate sales data starting from row 6
    int currentRow = 6;
    decimal totalSales = 0;
    foreach (var sale in salesData)
    {
        sheet[$"B{currentRow}"].Value = sale.Key;  // Product name
        sheet[$"C{currentRow}"].DecimalValue = sale.Value;  // Sales amount
        sheet[$"D{currentRow}"].Formula = $"=C{currentRow}/C${salesData.Count + 6}*100"; // Percentage formula
        totalSales += sale.Value;
        currentRow++;
    }
    // Update total row with sum
    sheet[$"C{currentRow}"].DecimalValue = totalSales;
    sheet[$"C{currentRow}"].Style.Font.Bold = true;
    // Save with timestamp
    string outputPath = $"Reports/Monthly_Report_{DateTime.Now:yyyyMMdd}.xlsx";
    workbook.SaveAs(outputPath);
}
public void GenerateMonthlyReport(string templatePath, Dictionary<string, decimal> salesData)
{
    // Load the existing template file
    WorkBook workbook = WorkBook.Load(templatePath);
    WorkSheet sheet = workbook.GetWorkSheet("Monthly Report");
    // Set report header information
    sheet["B2"].Value = $"Sales Report - {DateTime.Now:MMMM yyyy}";
    sheet["B3"].Value = $"Generated: {DateTime.Now:g}";
    // Populate sales data starting from row 6
    int currentRow = 6;
    decimal totalSales = 0;
    foreach (var sale in salesData)
    {
        sheet[$"B{currentRow}"].Value = sale.Key;  // Product name
        sheet[$"C{currentRow}"].DecimalValue = sale.Value;  // Sales amount
        sheet[$"D{currentRow}"].Formula = $"=C{currentRow}/C${salesData.Count + 6}*100"; // Percentage formula
        totalSales += sale.Value;
        currentRow++;
    }
    // Update total row with sum
    sheet[$"C{currentRow}"].DecimalValue = totalSales;
    sheet[$"C{currentRow}"].Style.Font.Bold = true;
    // Save with timestamp
    string outputPath = $"Reports/Monthly_Report_{DateTime.Now:yyyyMMdd}.xlsx";
    workbook.SaveAs(outputPath);
}
$vbLabelText   $csharpLabel

이 메서드는 판매 데이터를 받아 표준화된 템플릿을 채우며, 템플릿의 전문적인 외관을 유지하면서 비율과 총합을 자동으로 계산합니다. 템플릿의 기존 차트와 조건부 서식은 새로운 데이터에 따라 자동으로 업데이트됩니다. 참고: 데이터셋 개체 또는 데이터셋 컬렉션에서 엑셀로 데이터를 전송할 때, 열 이름을 유지하고 첫 번째 행을 헤더로 처리하십시오.

다음 예제 접근법은 사전에서 데이터를 기록하거나, 데이터베이스 쿼리에서 값을 삽입하거나, 다양한 시스템 소스에서 엑셀로 데이터를 내보낼 때 원활하게 작동합니다. 출력 파일을 액세스하기 쉽도록 지정된 폴더에 간단히 저장하십시오. DataTables 작업에 대한 추가 정보는 DataTable 가져오기 문서 및 소스 코드 예제를 참조하십시오.

입력

C#에서 템플릿을 내보내는 방법: 그림 7 - 엑셀 템플릿 입력

산출

C#에서 템플릿을 내보내는 방법: 그림 8 - 월간 보고서 출력

일반적인 문제 해결

템플릿 작업 시 경로가 정확한지, 다른 프로세스에 의해 템플릿이 잠겨 있지 않은지 확인하십시오. 암호로 보호된 템플릿의 경우 WorkBook.Load("template.xlsx", "password")를 사용하십시오. 수식이 업데이트되지 않으면, 데이터를 채운 후 sheet.Calculate()를 호출하십시오. 대규모 데이터셋의 경우, 메모리 사용을 최적화하기 위해 workbook.SaveAs()를 스트리밍 옵션과 함께 사용하는 것을 고려하십시오. xlsx 형식 파일에서 작업할 때, 다양한 시스템 환경에서 추가 정보 및 솔루션을 원하시면 문제 해결 문서를 참조하십시오.

결론

IronXL은 C#에서 엑셀 템플릿 채우기를 간소화하여, 복잡한 서식을 유지하면서 데이터셋 개체 및 데이터베이스 연결을 포함한 다양한 소스에서 동적 데이터를 효율적으로 주입할 수 있도록 합니다. 이 접근법은 개발 시간을 크게 줄이고 조직의 보고 워크플로 전반에 걸쳐 문서의 일관성을 유지합니다. 엑셀에 데이터를 기록해야 하거나, 새 행을 삽입하거나, 출력 파일에 셀 서식을 적용해야 하는 경우, IronXL은 .NET 애플리케이션에서 전문적인 엑셀 자동화를 위한 필요한 도구를 제공합니다.

엑셀 보고를 간소화할 준비가 되셨나요? 무료 IronXL 체험판을 시작하여 프로젝트에서 템플릿 채우기를 테스트하거나, 워크플로를 향상시키기 위한 더 많은 엑셀 자동화 튜토리얼을 탐색하십시오. 프로덕션 배포를 위해서, 필요한 라이선스 옵션을 보기 위해 라이선스 옵션을 확인하십시오.

C#에서 템플릿을 내보내는 방법: 그림 9 - 라이센싱

자주 묻는 질문

IronXL 사용하여 데이터를 Excel 템플릿으로 내보낼 때의 장점은 무엇입니까?

IronXL 사용하면 Microsoft Office 또는 Excel Interop 없이도 서식, 수식 및 레이아웃을 효율적으로 유지하면서 기존 Excel 템플릿으로 데이터를 내보낼 수 있습니다.

IronXL 사용하여 데이터셋 객체의 데이터를 Excel 템플릿으로 내보낼 수 있습니까?

예, IronXL 기존 템플릿 구조를 유지하면서 데이터셋 객체를 포함한 다양한 소스의 데이터를 Excel 템플릿으로 내보내는 기능을 지원합니다.

IronXL 사용하여 Excel 작업을 하려면 Microsoft Office가 필수입니까?

아니요, IronXL Microsoft Office와 독립적으로 작동하며 C#에서 Excel 템플릿 작업을 위한 깔끔하고 고성능 솔루션을 제공합니다.

IronXL 데이터를 Excel 템플릿으로 내보낼 때 서식을 어떻게 처리하나요?

IronXL 기존 Excel 템플릿의 서식, 수식 및 레이아웃을 그대로 유지하여 데이터가 원하는 구조로 원활하게 내보내지도록 합니다.

IronXL 어떤 종류의 Excel 출력물을 생성할 수 있습니까?

IronXL 데이터를 템플릿에 기록하고 원본 서식과 구조를 그대로 유지함으로써 전문적인 Excel 시트 출력물을 생성할 수 있습니다.

IronXL Excel 템플릿에서 동적 데이터 입력 기능을 지원합니까?

네, IronXL 동적 데이터 입력 기능을 지원하여 템플릿의 무결성을 유지하면서 다양한 소스의 데이터로 Excel 템플릿을 효율적으로 채울 수 있습니다.

IronXL 수식이 포함된 복잡한 Excel 템플릿을 처리할 수 있습니까?

IronXL 수식이 포함된 복잡한 Excel 템플릿을 처리할 수 있으며, 데이터 내보내기 후에도 수식이 그대로 유지되고 정상적으로 작동하도록 보장합니다.

IronXL Excel로 데이터를 내보낼 때 뛰어난 성능을 발휘하는 솔루션인 이유는 무엇일까요?

IronXL은 Microsoft Office와 독립적으로 작동할 수 있는 기능과 다양한 데이터 소스를 처리하는 고급 기능을 갖추고 있어 Excel로 데이터를 내보내는 데 있어 고성능 솔루션입니다.

외부 라이브러리 없이 C#을 사용하여 데이터를 Excel 워크시트 템플릿으로 내보낼 수 있을까요?

네, IronXL 사용하면 Microsoft Office와 같은 외부 프로그램에 의존하지 않고 C#을 이용하여 데이터를 Excel 워크시트 템플릿으로 내보낼 수 있습니다.

IronXL 엑셀에서 보고서를 생성하는 과정을 어떻게 간소화합니까?

IronXL 사용자가 데이터를 Excel 템플릿으로 직접 내보낼 수 있도록 하여 보고서 생성을 간소화하고, 원래 서식과 레이아웃을 유지하며 수동 조정이 필요 없도록 합니다.

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

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

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

Iron Support Team

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