Przejdź do treści stopki
KORZYSTANIE Z IRONXL

Jak wyeksportować szablon w języku C#

Praca z szablonami programu Microsoft Excel usprawnia generowanie raportów poprzez zachowanie formatowania, formuł i układów przy jednoczesnym dynamicznym wypełnianiu danymi. Ten samouczek pokazuje, jak efektywnie eksportować dane do istniejących szablonów arkuszy Excel przy użyciu IronXl.Excel, eliminując zależność od pakietu Microsoft Office lub interoperacyjności Excel. Poniższy przykład pokazuje, jak zapisywać dane w szablonach Excel i tworzyć profesjonalne arkusze Excel. Załóżmy, że szukasz sposobu na eksportowanie plików C# do istniejącego szablonu Excel bez zainstalowanego pakietu Microsoft Office. W takim przypadku ta biblioteka Excel zapewnia przejrzyste, wydajne rozwiązanie z bardziej zaawansowanymi funkcjami, które umożliwiają wstawianie danych z różnych źródeł, w tym obiektów zestawów danych.

Oprócz skoroszytów Excel, IronXL dobrze integruje się z innymi formatami wymiany danych, takimi jak pliki XML, umożliwiając programistom łatwe importowanie, eksportowanie lub przekształcanie danych strukturalnych między systemami. Niezależnie od tego, czy chcesz zapisać dane do Excela z bazy danych, czy z plików systemówych, ta biblioteka zapewnia płynną integrację z aplikacjami .NET.

Jak wyeksportować szablon w języku C#: Rysunek 1

Dłączego warto używać szablonów Excel do eksportu danych?

Szablony programu Excel oferują znaczące korzyści w porównaniu z tworzeniem arkuszy kalkulacyjnych od podstaw. Szablony zachowują profesjonalne formatowanie, złożone formuły, reguły formatowania warunkówego oraz sprawdzone struktury danych. Organizacje często dysponują standardowymi szablonami faktur, raportów i pulpitów nawigacyjnych, które muszą zachować swój wygląd, jednocześnie uwzględniając dynamiczne dane z baz danych, interfejsów API lub obiektów zbiorczych, takich jak tabele danych. Podczas stosowania formatowania warunkówego i formatowania komórek w pliku wyjściowym szablony zapewniają spójność wszystkich wygenerowanych dokumentów w formacie xlsx.

Wypełniając istniejące szablony programowo, programiści oszczędzają niezliczone godziny pracy nad formatowaniem i zapewniają spójność wszystkich generowanych dokumentów. IronXL sprawia, że proces ten przebiega płynnie, obsługując różne formaty Excel, w tym pliki XLSX, XLS, szablony XLSM i XLTX, bez konieczności instalowania pakietu Office. Kod źródłowy tych operacji jest prosty i łatwy do wdrożenia w dowolnym folderze projektu.

Jak wyeksportować szablon w języku C#: Rysunek 2

Konfiguracja IronXL do operacji z szablonami

Zacznij od zainstalowania IronXL za pomocą menedżera pakietów NuGet. Otwórz konsolę menedżera pakietów i uruchom następujące polecenie:

Install-Package IronXl.Excel

Jak wyeksportować szablon w języku C#: Rysunek 3

Po instalacji dodaj niezbędną przestrzeń nazw do pliku C#:

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

IronXL działa niezależnie, bez konieczności instalacji pakietu Microsoft Office, co czyni go idealnym rozwiązaniem dla środowisk serwerowych i aplikacji wielopłatformowych, w tym kontenerów Docker i platform chmurowych. Szczegółowe instrukcje konfiguracji i dodatkowe informacje można znaleźć w przewodniku IronXL "Pierwsze kroki". Biblioteka obsługuje .NET Framework, .NET Core i .NET 5+ w środowiskach Windows, Linux i macOS, dzięki czemu idealnie nadaje się do aplikacji .NET.

Jak wyeksportować szablon w języku C#: Rysunek 4 — Funkcje

Ładowanie i wypełnianie szablonów Excel

Wczytanie istniejącego szablonu jest proste dzięki metodzie WorkBook.Load() w IronXL. Poniższy przykład pokazuje, jak otworzyć szablon i wypełnić go danymi, traktując pierwszy wiersz jako nagłówki i efektywnie zarządzając nazwami kolumn:

// 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");
Imports System

' Load the existing Excel template for data import
Dim workbook As WorkBook = WorkBook.Load("ReportTemplate.xlsx")
Dim sheet As WorkSheet = 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.50D
sheet("C7").DecimalValue = 98500.75D
sheet("C8").Formula = "=C6-C7" ' Profit calculation
' Populate a range with array data
Dim monthlyData As Decimal() = {10500D, 12300D, 15600D, 11200D}
For i As Integer = 0 To monthlyData.Length - 1
    sheet($"E{10 + i}").DecimalValue = monthlyData(i)
Next
' Save the populated template
workbook.SaveAs("Q4_Sales_Report.xlsx")
$vbLabelText   $csharpLabel

Ten kod ładuje gotowy szablon, zachowuje całe dotychczasowe formatowanie i wypełnia określone komórki nowymi danymi. Właściwość DecimalValue zapewnia zachowanie prawidłowego formatowania danych liczbowych. Komórki zawierające formuły są automatycznie przeliczane po zmianie sąsiednich danych, co pozwala zachować logikę obliczeniową szablonu. Dowiedz się więcej o pracy z formułami programu Excel w IronXL.

Dane wejściowe

Jak wyeksportować szablon w języku C#: Rysunek 5 — Przykładowe dane wejściowe szablonu

Wynik

Jak wyeksportować szablon w języku C#: Rysunek 6 — Wczytanie wyników szablonu Excel

Praca z symbolami zastępczymi szablonów

Wiele szablonów zawiera znaczniki tekstu zastępczego, które należy zastąpić rzeczywistymi danymi. IronXL skutecznie radzi sobie z tym scenariuszem dzięki iteracji komórek i zamianie tekstu. Gdy trzeba zapisać dane w szablonach Excel i wstawić treści dynamiczne, to podejście zapewnia maksymalną elastyczność:

// 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");
Imports System

' Load template with placeholders
Dim workbook As WorkBook = WorkBook.Load("InvoiceTemplate.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Find and replace placeholder text in cells
For Each cell In sheet("A1:H50")
    If cell.Text.Contains("{{CustomerName}}") Then
        cell.Value = cell.Text.Replace("{{CustomerName}}", "Acme Corporation")
    End If
    If cell.Text.Contains("{{InvoiceDate}}") Then
        cell.Value = cell.Text.Replace("{{InvoiceDate}}", DateTime.Now.ToShortDateString())
    End If
    If cell.Text.Contains("{{InvoiceNumber}}") Then
        cell.Value = cell.Text.Replace("{{InvoiceNumber}}", "INV-2024-001")
    End If
Next
' Populate line items dynamically
Dim items = {
    New With {.Description = "Software License", .Qty = 5, .Price = 299.99},
    New With {.Description = "Support Package", .Qty = 1, .Price = 999.99}
}
Dim startRow As Integer = 15
For Each 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 += 1
Next
workbook.SaveAs("GeneratedInvoice.xlsx")
$vbLabelText   $csharpLabel

To podejście polega na wyszukiwaniu znaczników zastępczych w określonym zakresie i zastępowaniu ich rzeczywistymi wartościami. Formatowanie szablonu, w tym czcionki, kolory i obramowania, pozostaje niezmienione w trakcie całego procesu. W bardziej zaawansowanych scenariuszach warto zapoznać się z opcjami stylizacji komórek w IronXL, aby w razie potrzeby dynamicznie modyfikować formatowanie.

Przykład wdrożenia w praktyce

Oto kompletny przykład generowania miesięcznego raportu sprzedaży na podstawie istniejącego szablonu Excel z wstępnie sformatowanymi komórkami. Ten kod pokazuje, jak obsługiwać zdarzenia wysyłające obiekty i tworzyć kompleksowe raporty. Podczas pracy z danymi z systemówej bazy danych lub kolekcji w pamięci można efektywnie eksportować dane do programu Excel, używając nowej tabeli danych lub istniejącego zestawu danych w celu wypełnienia szablonów:

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);
}
Public Sub GenerateMonthlyReport(templatePath As String, salesData As Dictionary(Of String, Decimal))
    ' Load the existing template file
    Dim workbook As WorkBook = WorkBook.Load(templatePath)
    Dim sheet As WorkSheet = 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
    Dim currentRow As Integer = 6
    Dim totalSales As Decimal = 0
    For Each 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 += 1
    Next
    ' Update total row with sum
    sheet($"C{currentRow}").DecimalValue = totalSales
    sheet($"C{currentRow}").Style.Font.Bold = True
    ' Save with timestamp
    Dim outputPath As String = $"Reports/Monthly_Report_{DateTime.Now:yyyyMMdd}.xlsx"
    workbook.SaveAs(outputPath)
End Sub
$vbLabelText   $csharpLabel

Ta metoda przyjmuje dane dotyczące sprzedaży i wypełnia standardowy szablon, automatycznie obliczając wartości procentowe i sumy, zachowując jednocześnie profesjonalny wygląd szablonu. Istniejące wykresy i formatowanie warunkówe w szablonie są automatycznie aktualizowane na podstawie nowych danych. Uwaga: Podczas przenoszenia danych do programu Excel z obiektów DataTable lub zbiorów danych należy zachować nazwy kolumn i potraktować pierwszy wiersz jako nagłówki.

Poniższe przykładowe podejście sprawdza się doskonale, niezależnie od tego, czy chcesz zapisać dane ze słowników, wstawić wartości z zapytań do bazy danych, czy też wyeksportować dane do programu Excel z różnych źródeł systemówych. Wystarczy zapisać plik wyjściowy w wyznaczonym folderze, aby mieć do niego łatwy dostęp. Aby uzyskać dodatkowe informacje na temat pracy z DataTables, zapoznaj się z dokumentacją dotyczącą importu DataTable oraz przykładami kodu źródłowego.

Dane wejściowe

Jak wyeksportować szablon w języku C#: Rysunek 7 — Wprowadzanie szablonu programu Excel

Wynik

Jak wyeksportować szablon w języku C#: Rysunek 8 — Wynik raportu miesięcznego

Rozwiązywanie typowych problemów

Podczas pracy z szablonami upewnij się, że ścieżki do plików są poprawne, a szablony nie są zablokowane przez inne procesy. W przypadku szablonów chronionych hasłem należy użyć WorkBook.Load("template.xlsx", "password"). Jeśli formuły nie aktualizują się, wywołaj metodę sheet.Calculate() po wprowadzeniu danych. W przypadku dużych zbiorów danych warto rozważyć użycie metody workbook.SaveAs() z opcjami strumieniowania, aby zoptymalizować wykorzystanie pamięci. W przypadku pracy z plikami w formacie xlsx w różnych środowiskach systemówych należy zapoznać się z dokumentacją dotyczącą rozwiązywania problemów, aby uzyskać dodatkowe informacje i rozwiązania.

Wnioski

IronXL upraszcza wypełnianie szablonów Excel w języku C#, zachowując złożone formatowanie i jednocześnie efektywnie wprowadzając dane dynamiczne z różnych źródeł, w tym obiektów zestawów danych i połączeń z bazami danych. Takie podejście znacznie skraca czas programowania i zapewnia spójność dokumentów w ramach procesów raportowania w całej organizacji. Niezależnie od tego, czy chcesz zapisać dane w Excelu, wstawić nowe wiersze, czy zastosować formatowanie komórek w pliku wyjściowym, IronXL zapewnia narzędzia niezbędne do profesjonalnej automatyzacji Excela w aplikacjach .NET.

Chcesz usprawnić tworzenie raportów w Excelu? Rozpocznij bezpłatny okres próbny IronXL, aby przetestować wypełnianie szablonów w swoim projekcie, lub zapoznaj się z innymi samouczkami dotyczącymi automatyzacji programu Excel, aby usprawnić swój przepływ pracy. Aby wdrożyć rozwiązanie w środowisku produkcyjnym, zapoznaj się z opcjami licencyjnymi dostosowanymi do Twoich potrzeb.

Jak wyeksportować szablon w języku C#: Rysunek 9 — Licencjonowanie

Często Zadawane Pytania

Jaka jest zaleta korzystania z IronXL do eksportowania danych do szablonu Excel?

IronXL pozwala na eksport danych do istniejącego szablonu Excel bez konieczności korzystania z pakietu Microsoft Office lub Excel Interop, skutecznie zachowując formatowanie, formuły i układy.

Czy mogę wyeksportować dane z obiektu zestawu danych do szablonu Excel za pomocą IronXL?

Tak, IronXL obsługuje eksport danych z różnych źródeł, w tym obiektów zestawów danych, do szablonów Excel przy zachowaniu istniejącej struktury szablonu.

Czy do korzystania z IronXL w programie Excel wymagany jest pakiet Microsoft Office?

Nie, IronXL działa niezależnie od pakietu Microsoft Office, zapewniając przejrzyste i wydajne rozwiązanie do pracy z szablonami Excel w języku C#.

W jaki sposób IronXL radzi sobie z formatowaniem podczas eksportowania danych do szablonów Excel?

IronXL zachowuje istniejące formatowanie, formuły i układ szablonów Excel, zapewniając płynny eksport danych do pożądanej struktury.

Jakie rodzaje plików Excel może tworzyć IronXL?

IronXL może tworzyć profesjonalne arkusze Excel poprzez zapisywanie danych w szablonach i zachowanie integralności oryginalnego formatowania oraz struktury.

Czy IronXL obsługuje dynamiczne wypełnianie danych w szablonach Excel?

Tak, IronXL obsługuje dynamiczne wypełnianie danymi, co pozwala na wydajne wypełnianie szablonów Excel danymi z różnych źródeł przy zachowaniu integralności szablonu.

Czy IronXL radzi sobie z złożonymi szablonami Excela zawierającymi formuły?

IronXL jest w stanie obsługiwać złożone szablony Excel zawierające formuły, zapewniając, że po eksporcie danych formuły pozostają nienaruszone i działają poprawnie.

Co sprawia, że IronXL jest wysokowydajnym rozwiązaniem do eksportowania danych do Excela?

Możliwość pracy IronXL niezależnie od pakietu Microsoft Office oraz zaawansowane funkcje obsługi różnych źródeł danych sprawiają, że jest to wysokowydajne rozwiązanie do eksportowania danych do programu Excel.

Czy możliwe jest wyeksportowanie danych do szablonu arkusza Excel przy użyciu języka C# bez zewnętrznych zależności?

Tak, IronXL umożliwia eksportowanie danych do szablonu arkusza Excel przy użyciu języka C# bez konieczności korzystania z zewnętrznych zależności, takich jak Microsoft Office.

W jaki sposób IronXL upraszcza proces generowania raportów w programie Excel?

IronXL upraszcza generowanie raportów, umożliwiając użytkownikom eksportowanie danych bezpośrednio do szablonów Excel, zachowując oryginalne formatowanie i układ oraz eliminując konieczność ręcznych poprawek.

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie