Przejdź do treści stopki
KORZYSTANIE Z IRONXL

Jak wygenerować plik Excel w języku C# przy użyciu IronXL

Programowe generowanie plików arkuszy kalkulacyjnych Excel w języku C# lub Visual Basic tradycyjnie wymagało instalacji pakietu Microsoft Office lub złożonej integracji COM. IronXL całkowicie to zmienia, oferując proste API, które tworzy pliki aplikacji Excel bez żadnych zależności od pakietu Office. Ten samouczek przeprowadzi Cię przez proces tworzenia plików Excel w języku C# przy użyciu IronXL, od podstawowego tworzenia arkuszy kalkulacyjnych po zaawansowane formatowanie i integrację z bazami danych. Niezależnie od tego, czy tworzysz raporty, eksportujesz dane (pliki XLS lub XLSX), czy automatyzujesz generowanie arkuszy kalkulacyjnych, poznasz podstawowe techniki pracy z programem Excel w aplikacjach .NET.

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Obraz 1 — IronXL

Dłączego warto generować arkusze kalkulacyjne Excel bez pakietu Microsoft Office?

Opracowanie funkcji generowania plików Excel bez zależności od pakietu Office rozwiązuje kluczowe wyzwania związane z wdrażaniem. W środowiskach serwerowych rzadko instaluje się pakiet Microsoft Office ze względu na koszty licencji i obciążenie zasobów. Każda instalacja pakietu Office wymaga znacznej ilości miejsca na dysku i pamięci, co sprawia, że nie nadaje się on do wdrożeń w chmurze lub aplikacji kontenerowych.

IronXL eliminuje te ograniczenia, działając niezależnie. Generowanie plików Excel w języku C# działa bez modyfikacji w systemach Windows, Linux, macOS, kontenerach Docker lub usługach Azure App Services. Ta kompatybilność między platformami oznacza, że piszesz kod raz i wdrażasz go gdziekolwiek, niezależnie od tego, czy tworzysz aplikacje dla .NET Framework, .NET Core czy .NET 8/9.

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Obraz 2 – Wielopłatformowy

Wydajność znacznie wzrasta bez obciążenia związanego z COM Interop. Tradycyjna automatyzacja biurowa tworzy oddzielne instancje procesów dla każdej operacji, zużywając pamięć i zasoby procesora. IronXL przetwarza wszystko w pamięci w przestrzeni procesówej aplikacji, co skutkuje szybszym działaniem i mniejszym zużyciem zasobów podczas programowego generowania plików Excel.

Wdrożenie jest proste, ponieważ IronXL jest dostarczany jako pojedynczy pakiet NuGet. Bez żadnych wpisów w rejestrze, rejestracji COM i pakietów serwisowych Office do utrzymania. Twoje potoki ciągłej integracji działają płynnie, a kontenery Docker pozostają lekkie. To uproszczone podejście sprawiło, że IronXL stał się popularnym wyborem, o czym dyskutuje się na różnych forach programistów, gdzie Professionals dzielą się swoimi doświadczeniami z automatyzacją Excela.

Niektórzy programiści nadal korzystają z narzędzia Microsoft Open XML Productivity Tool do bezpośredniej pracy ze strukturami plików Office Open XML. Takie podejście wymaga jednak większego nakładu pracy ręcznej oraz szczegółowej wiedzy na temat schematu XML i instalacji Open XML SDK. IronXL eliminuje te złożoności, zapewniając znacznie szybszy dostęp do programowego korzystania z programu Excel.

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 3 – Funkcje

Jak zainstalować IronXL w projekcie C#?

Instalacja IronXL zajmuje zaledwie kilka chwil za pomocą menedżera pakietów NuGet w Solution Explorer. W programie Visual Studio kliknij prawym przyciskiem myszy swój projekt i wybierz opcję "Zarządzaj pakietami NuGet". Wyszukaj "IronXl.Excel" i kliknij "Zainstaluj". Pakiet automatycznie zawiera wszystkie zależności wymagańe do generowania plików Excel w języku C#.

Alternatywnie można użyć konsoli menedżera pakietów:

Install-Package IronXl.Excel

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 4 – Instalacja

Dla użytkowników .NET CLI pracujących nad nowoczesnymi projektami w języku C#:

dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

Sprawdź instalację za pomocą tego prostego testu, aby programowo utworzyć plik Excel:

using IronXL;
// Create a new Excel workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
using IronXL;
// Create a new Excel workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
Imports IronXL

' Create a new Excel workbook
Dim workbook = WorkBook.Create()
Console.WriteLine("IronXL installed successfully!")
$vbLabelText   $csharpLabel

Ten kod tworzy obiekt skoroszytu w pamięci. Jeśli program działa bez błędów, IronXL jest gotowy do użycia. Biblioteka obsługuje wszystkie nowoczesne wersje .NET, zapewniając kompatybilność z istniejącymi projektami. Szczegółowe instrukcje dotyczące instalacji i rozwiązywania problemów można znaleźć w oficjalnej dokumentacji. Gotowi, aby rozpocząć? Pobierz IronXL już teraz i zacznij generować pliki Excel w ciągu kilku minut.

Wynik

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 5 – Wynik w konsoli

Jak utworzyć swój pierwszy plik Excel?

Tworzenie plików Excel za pomocą IronXL rozpoczyna się od klasy WorkBook, która stanowi bramę do wszystkich operacji programu Excel. Biblioteka obsługuje zarówno nowoczesny format XLSX, jak i starszy format XLS, co zapewnia elastyczność w przypadku różnych wymagań podczas generowania plików Excel w języku C#.

using IronXL;
// Create a new workbook (XLSX format by default)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Title = "Monthly Sales Report";
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Comments = "Generated using IronXL";
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("January Sales");
// Add some basic data
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
// Add data rows
worksheet["A2"].Value = new DateTime(2024, 1, 15);
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 100;
worksheet["D2"].Value = 2500.00;
// Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx");
using IronXL;
// Create a new workbook (XLSX format by default)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Title = "Monthly Sales Report";
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Comments = "Generated using IronXL";
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("January Sales");
// Add some basic data
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
// Add data rows
worksheet["A2"].Value = new DateTime(2024, 1, 15);
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 100;
worksheet["D2"].Value = 2500.00;
// Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx");
Imports IronXL

' Create a new workbook (XLSX format by default)
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)

' Add metadata
workbook.Metadata.Title = "Monthly Sales Report"
workbook.Metadata.Author = "Sales Department"
workbook.Metadata.Comments = "Generated using IronXL"

' Create a worksheet
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("January Sales")

' Add some basic data
worksheet("A1").Value = "Date"
worksheet("B1").Value = "Product"
worksheet("C1").Value = "Quantity"
worksheet("D1").Value = "Revenue"

' Add data rows
worksheet("A2").Value = New DateTime(2024, 1, 15)
worksheet("B2").Value = "Widget Pro"
worksheet("C2").Value = 100
worksheet("D2").Value = 2500.0

' Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx")
$vbLabelText   $csharpLabel

Ten kod ilustruje kilka kluczowych koncepcji związanych z generowaniem plików Excel. Metoda WorkBook.Create() inicjuje nowy plik Excel w pamięci. Format określa się za pomocą wyliczenia ExcelFileFormat — wybierz XLSX dla zgodności z nowoczesnym Excelem lub XLS dla obsługi starszych wersji. Właściwość Metadata pozwala na osadzenie informacji o dokumencie, które pojawiają się we właściwościach pliku programu Excel, zgodnie ze standardami właściwości dokumentów firmy Microsoft.

Metoda CreateWorkSheet() dodaje nowy arkusz o podanej nazwie. Znana z programu Excel notacja komórek (A1, B1 itp.) sprawia, że ustawianie wartości jest intuicyjne. IronXL automatycznie obsługuje konwersję typów danych, rozpoznając daty, liczby i tekst bez konieczności jawnego rzutowania. Metoda SaveAs() zapisuje cały plik Excel na dysku. Aby uzyskać więcej informacji na temat operacji na arkuszach, zapoznaj się z samouczkiem dotyczącym zarządzania arkuszami.

Wynik

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 6 — Podstawowy wynik w formacie Excel

Jak zapisać dane w komórkach programu Excel?

IronXL oferuje wiele sposobów wypełniania komórek w Excelu, od przypisywania wartości do pojedynczych komórek po operacje na wielu komórkach naraz. Zrozumienie tych metod pomoże Ci wybrać najbardziej efektywne podejście do Twojego scenariusza danych.

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Individual cell assignment
worksheet["A1"].Value = "Employee Name";
worksheet["A2"].Value = "John Smith";
worksheet["A3"].Value = "Jane Doe";
// Range assignment for multiple cells
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based population
string[] headers = { "ID", "Name", "Email", "Phone" };
for (int i = 0; i < headers.Length; i++)
{
    worksheet.SetCellValue(0, i, headers[i]);
}
// Working with different data types
worksheet["E1"].Value = "Salary";
worksheet["E2"].Value = 75000.50m;  // Decimal for currency
worksheet["E3"].Value = 82000.75m;
worksheet["F1"].Value = "Start Date";
worksheet["F2"].Value = new DateTime(2020, 3, 15);
worksheet["F3"].Value = new DateTime(2019, 7, 1);
worksheet["G1"].Value = "Full Time";
worksheet["G2"].Value = true;  // Boolean
worksheet["G3"].Value = true;
workbook.SaveAs("FirstExcelFile.xlsx");
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Individual cell assignment
worksheet["A1"].Value = "Employee Name";
worksheet["A2"].Value = "John Smith";
worksheet["A3"].Value = "Jane Doe";
// Range assignment for multiple cells
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based population
string[] headers = { "ID", "Name", "Email", "Phone" };
for (int i = 0; i < headers.Length; i++)
{
    worksheet.SetCellValue(0, i, headers[i]);
}
// Working with different data types
worksheet["E1"].Value = "Salary";
worksheet["E2"].Value = 75000.50m;  // Decimal for currency
worksheet["E3"].Value = 82000.75m;
worksheet["F1"].Value = "Start Date";
worksheet["F2"].Value = new DateTime(2020, 3, 15);
worksheet["F3"].Value = new DateTime(2019, 7, 1);
worksheet["G1"].Value = "Full Time";
worksheet["G2"].Value = true;  // Boolean
worksheet["G3"].Value = true;
workbook.SaveAs("FirstExcelFile.xlsx");
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Create a worksheet
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")
' Individual cell assignment
worksheet("A1").Value = "Employee Name"
worksheet("A2").Value = "John Smith"
worksheet("A3").Value = "Jane Doe"
' Range assignment for multiple cells
worksheet("B1:B3").Value = "Active"
' Using numeric indices (0-based)
worksheet.SetCellValue(0, 2, "Department") ' C1
worksheet.SetCellValue(1, 2, "Sales") ' C2
worksheet.SetCellValue(2, 2, "Marketing") ' C3
' Array-based population
Dim headers As String() = {"ID", "Name", "Email", "Phone"}
For i As Integer = 0 To headers.Length - 1
    worksheet.SetCellValue(0, i, headers(i))
Next
' Working with different data types
worksheet("E1").Value = "Salary"
worksheet("E2").Value = 75000.5D ' Decimal for currency
worksheet("E3").Value = 82000.75D
worksheet("F1").Value = "Start Date"
worksheet("F2").Value = New DateTime(2020, 3, 15)
worksheet("F3").Value = New DateTime(2019, 7, 1)
worksheet("G1").Value = "Full Time"
worksheet("G2").Value = True ' Boolean
worksheet("G3").Value = True
workbook.SaveAs("FirstExcelFile.xlsx")
$vbLabelText   $csharpLabel

Kod pokazuje elastyczne adresowanie komórek w IronXL. Notacja łańcuchowa ("A1") jest naturalna dla użytkowników programu Excel, natomiast indeksy numeryczne zapewniają programową kontrolę nad pętlami i dynamicznym generowaniem. Przypisania zakresów ("B1:B3") pozwalają efektywnie ustawić tę samą wartość w wielu komórkach, co idealnie nadaje się do inicjalizacji kolumn lub stosowania wartości domyślnych.

IronXL inteligentnie obsługuje różne typy danych. Liczby dziesiętne zachowują precyzję w przypadku danych finansowych, obiekty DateTime są formatowane poprawnie jako daty w formacie Excel, a wartości logiczne wyświetlane są jako TRUE/FALSE. Ta automatyczna konwersja eliminuje konieczność ręcznego formatowania kodu, zapewniając jednocześnie integralność danych.

Wynik

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 7 – Wynik w formacie Excel

W przypadku większych zbiorów danych warto rozważyć następujący wzorzec:

// Populate from a data source
var employees = GetEmployeeData(); // Your data source
for (int row = 0; row < employees.Count; row++)
{
    worksheet[$"A{row + 2}"].Value = employees[row].Id;
    worksheet[$"B{row + 2}"].Value = employees[row].Name;
    worksheet[$"C{row + 2}"].Value = employees[row].Department;
    worksheet[$"D{row + 2}"].Value = employees[row].Salary;
}
// Populate from a data source
var employees = GetEmployeeData(); // Your data source
for (int row = 0; row < employees.Count; row++)
{
    worksheet[$"A{row + 2}"].Value = employees[row].Id;
    worksheet[$"B{row + 2}"].Value = employees[row].Name;
    worksheet[$"C{row + 2}"].Value = employees[row].Department;
    worksheet[$"D{row + 2}"].Value = employees[row].Salary;
}
' Populate from a data source
Dim employees = GetEmployeeData() ' Your data source
For row As Integer = 0 To employees.Count - 1
    worksheet($"A{row + 2}").Value = employees(row).Id
    worksheet($"B{row + 2}").Value = employees(row).Name
    worksheet($"C{row + 2}").Value = employees(row).Department
    worksheet($"D{row + 2}").Value = employees(row).Salary
Next
$vbLabelText   $csharpLabel

To podejście iteruje przez zbiór danych, mapując każdą właściwość do odpowiedniej kolumny. Interpolacja ciągów znaków ($"A{row + 2}") dynamicznie generuje adresy komórek, zaczynając od wiersza 2, aby zachować nagłówki.

Jak zastosować profesjonalne formatowanie?

Profesjonalne pliki Excel wymagają czegoś więcej niż tylko surowych danych. API stylizacji IronXL przekształca zwykłe arkusze kalkulacyjne w dopracowane dokumenty biznesowe poprzez formatowanie, kolory i hierarchię wizualną podczas generowania plików Excel w języku C#.

using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Header formatting
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
// Column width adjustment
worksheet.AutoSizeColumn(0); // Auto-fit column A
worksheet.GetColumn(1).Width = 20; // Set column B to 20 characters
// Number formatting
var salaryColumn = worksheet["E2:E3"];
salaryColumn.FormatString = "$#,##0.00";
// Date formatting
var dateColumn = worksheet["F2:F3"];
dateColumn.FormatString = "MM/dd/yyyy";
// Cell borders
var dataRange = worksheet["A1:G3"];
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin;
// To set border color, use:
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
dataRange.Style.LeftBorder.Color = "#000000";
dataRange.Style.RightBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability
for (int row = 2; row <= 3; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Header formatting
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
// Column width adjustment
worksheet.AutoSizeColumn(0); // Auto-fit column A
worksheet.GetColumn(1).Width = 20; // Set column B to 20 characters
// Number formatting
var salaryColumn = worksheet["E2:E3"];
salaryColumn.FormatString = "$#,##0.00";
// Date formatting
var dateColumn = worksheet["F2:F3"];
dateColumn.FormatString = "MM/dd/yyyy";
// Cell borders
var dataRange = worksheet["A1:G3"];
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin;
// To set border color, use:
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
dataRange.Style.LeftBorder.Color = "#000000";
dataRange.Style.RightBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability
for (int row = 2; row <= 3; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
Imports IronXL

Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Create a worksheet
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")
' Header formatting
Dim headerRange = worksheet("A1:D1")
headerRange.Style.Font.Bold = True
headerRange.Style.Font.Height = 12
headerRange.Style.SetBackgroundColor("#4472C4")
headerRange.Style.Font.Color = "#FFFFFF"
' Column width adjustment
worksheet.AutoSizeColumn(0) ' Auto-fit column A
worksheet.GetColumn(1).Width = 20 ' Set column B to 20 characters
' Number formatting
Dim salaryColumn = worksheet("E2:E3")
salaryColumn.FormatString = "$#,##0.00"
' Date formatting
Dim dateColumn = worksheet("F2:F3")
dateColumn.FormatString = "MM/dd/yyyy"
' Cell borders
Dim dataRange = worksheet("A1:G3")
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin
' To set border color, use:
dataRange.Style.TopBorder.Color = "#000000"
dataRange.Style.BottomBorder.Color = "#000000"
dataRange.Style.LeftBorder.Color = "#000000"
dataRange.Style.RightBorder.Color = "#000000"
' Text alignment
worksheet("A1:G1").Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center
' Alternating row colors for readability
For row As Integer = 2 To 3
    If row Mod 2 = 0 Then
        worksheet($"A{row}:G{row}").Style.SetBackgroundColor("#F2F2F2")
    End If
Next row
$vbLabelText   $csharpLabel

Ten kod formatowania zapewnia profesjonalny wygląd zgodny ze standardami Enterprise. Pogrubione nagłówki z kolorowym tłem tworzą wizualną hierarchię. Metoda SetBackgroundColor() akceptuje szesnastkowe kody kolorów, zapewniając precyzyjną kontrolę nad schematem kolorów. Właściwości czcionki obejmują opcje rozmiaru, koloru, pogrubienia, kursywy i podkreślenia; wszystkie one są niezbędne do tworzenia plików Excel zgodnych z wytycznymi dotyczącymi wizerunku firmy.

Dostosowanie szerokości kolumn zapobiega ucinaniu tekstu. AutoSizeColumn() automatycznie dopasowuje zawartość, natomiast SetColumnWidth() zapewnia precyzyjną kontrolę. Formatowanie liczb wykorzystuje kody formatowania programu Excel. Na przykład "$#,##0.00" wyświetla walutę z separatorami tysięcy i dwoma miejscami po przecinku. Formatowanie daty odbywa się według podobnych wzorców, z wykorzystaniem standardowych ciągów formatowania daty w programie Excel, zgodnie z dokumentacją specyfikacji programu Excel firmy Microsoft.

Obramowania wyznaczają granice danych, poprawiając czytelność. Wyliczenie BorderType oferuje różne style: cienką, średnią, grubą, kropkowaną i przerywaną. Opcje wyrównania wyśrodkowują nagłówki i wyrównują liczby do prawej strony, zgodnie z konwencjami arkuszy kalkulacyjnych. Naprzemienne kolory wierszy, często nazywane "pasmowymi wierszami", pomagają czytelnikom śledzić informacje w rozległych zestawach danych. Dowiedz się więcej o zaawansowanym formatowaniu w celu tworzenia sformatowanych danych w Excelu w naszym przewodniku po stylach komórek.

Wynik

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 8 – Sformatowany wynik w formacie Excel

Jak programowo korzystać z formuł programu Excel?

Formuły programu Excel ożywiają arkusze kalkulacyjne dzięki automatycznym obliczeniom. IronXL obsługuje tworzenie i obliczanie formuł, umożliwiając tworzenie dynamicznych arkuszy kalkulacyjnych, które aktualizują się automatycznie.

var workbook = WorkBook.Create();
// Create a budget worksheet
WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget");
// Headers
budget["A1"].Value = "Category";
budget["B1"].Value = "January";
budget["C1"].Value = "February";
budget["D1"].Value = "March";
budget["E1"].Value = "Q1 Total";
// Budget categories and values
string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" };
decimal[,] monthlyBudgets = {
    { 50000, 52000, 51000 },
    { 15000, 18000, 20000 },
    { 8000, 8500, 9000 },
    { 12000, 5000, 7000 },
    { 3000, 3500, 4000 }
};
// Populate data
for (int i = 0; i < categories.Length; i++)
{
    budget[$"A{i + 2}"].Value = categories[i];
    budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0];
    budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1];
    budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2];
    // Row total formula
    budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})";
}
// Monthly totals row
budget["A7"].Value = "Monthly Total";
budget["B7"].Formula = "=SUM(B2:B6)";
budget["C7"].Formula = "=SUM(C2:C6)";
budget["D7"].Formula = "=SUM(D2:D6)";
budget["E7"].Formula = "=SUM(E2:E6)";
// Calculate percentages
budget["A9"].Value = "Marketing %";
budget["B9"].Formula = "=B3/B7*100";
budget["C9"].Formula = "=C3/C7*100";
budget["D9"].Formula = "=D3/D7*100";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
var workbook = WorkBook.Create();
// Create a budget worksheet
WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget");
// Headers
budget["A1"].Value = "Category";
budget["B1"].Value = "January";
budget["C1"].Value = "February";
budget["D1"].Value = "March";
budget["E1"].Value = "Q1 Total";
// Budget categories and values
string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" };
decimal[,] monthlyBudgets = {
    { 50000, 52000, 51000 },
    { 15000, 18000, 20000 },
    { 8000, 8500, 9000 },
    { 12000, 5000, 7000 },
    { 3000, 3500, 4000 }
};
// Populate data
for (int i = 0; i < categories.Length; i++)
{
    budget[$"A{i + 2}"].Value = categories[i];
    budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0];
    budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1];
    budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2];
    // Row total formula
    budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})";
}
// Monthly totals row
budget["A7"].Value = "Monthly Total";
budget["B7"].Formula = "=SUM(B2:B6)";
budget["C7"].Formula = "=SUM(C2:C6)";
budget["D7"].Formula = "=SUM(D2:D6)";
budget["E7"].Formula = "=SUM(E2:E6)";
// Calculate percentages
budget["A9"].Value = "Marketing %";
budget["B9"].Formula = "=B3/B7*100";
budget["C9"].Formula = "=C3/C7*100";
budget["D9"].Formula = "=D3/D7*100";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
Imports System

Dim workbook = WorkBook.Create()
' Create a budget worksheet
Dim budget As WorkSheet = workbook.CreateWorkSheet("Q1 Budget")
' Headers
budget("A1").Value = "Category"
budget("B1").Value = "January"
budget("C1").Value = "February"
budget("D1").Value = "March"
budget("E1").Value = "Q1 Total"
' Budget categories and values
Dim categories As String() = {"Salaries", "Marketing", "Operations", "Equipment", "Training"}
Dim monthlyBudgets As Decimal(,) = {
    {50000, 52000, 51000},
    {15000, 18000, 20000},
    {8000, 8500, 9000},
    {12000, 5000, 7000},
    {3000, 3500, 4000}
}
' Populate data
For i As Integer = 0 To categories.Length - 1
    budget($"A{i + 2}").Value = categories(i)
    budget($"B{i + 2}").Value = monthlyBudgets(i, 0)
    budget($"C{i + 2}").Value = monthlyBudgets(i, 1)
    budget($"D{i + 2}").Value = monthlyBudgets(i, 2)
    ' Row total formula
    budget($"E{i + 2}").Formula = $"=SUM(B{i + 2}:D{i + 2})"
Next
' Monthly totals row
budget("A7").Value = "Monthly Total"
budget("B7").Formula = "=SUM(B2:B6)"
budget("C7").Formula = "=SUM(C2:C6)"
budget("D7").Formula = "=SUM(D2:D6)"
budget("E7").Formula = "=SUM(E2:E6)"
' Calculate percentages
budget("A9").Value = "Marketing %"
budget("B9").Formula = "=B3/B7*100"
budget("C9").Formula = "=C3/C7*100"
budget("D9").Formula = "=D3/D7*100"
' Average calculation
budget("A10").Value = "Average Spending"
budget("B10").Formula = "=AVERAGE(B2:B6)"
' Evaluate all formulas
workbook.EvaluateAll()
workbook.SaveAs("Budget.xlsx")
$vbLabelText   $csharpLabel

Ten przykład budżetu ilustruje praktyczne zastosowanie formuł. Właściwość Formuła akceptuje standardową składnię formuł programu Excel, zaczynającą się od znaku równości. IronXL obsługuje popularne funkcje: SUM, AVERAGE, COUNT, MAX, MIN i wiele innych. Odwołania do komórek w formułach działają dokładnie tak samo jak w programie Excel, w tym odwołania względne i bezwzględne.

Formuły sumy wiersza (=SUM(B{i + 2}:D{i + 2})) obliczają kwartalne sumy dla każdej kategorii. Interpolacja ciągów znaków dynamicznie generuje prawidłowe odwołania do komórek dla każdego wiersza. Sumy miesięczne to suma całych kolumn, natomiast obliczenia procentowe to podzielenie określonych komórek przez sumy.

Metoda EvaluateAll() przetwarza wszystkie formuły, aktualizując obliczone wartości w całym skoroszycie. Dzięki temu formuły wyświetlają wyniki po otwarciu w programie Excel. Bez oceny program Excel wyświetlałby formuły do momentu, aż użytkownik uruchomiłby ponowne obliczenia.

Wynik

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 9 — Wynik w formacie Excel przy użyciu formuł

Jak wyeksportować dane z baz danych do programu Excel?

W praktyce dane z baz danych są często eksportowane do programu Excel w celu sporządzenia raportów i przeprowadzenia analizy. IronXL usprawnia ten proces dzięki wbudowanej obsłudze DataTable, eliminując potrzebę ręcznego mapowania pól podczas generowania plików Excel z aplikacji C#.

using System;
using System.Data;
using System.Data.SqlClient;
// Simulate database retrieval (replace with your actual database code)
DataTable GetSalesData()
{
    DataTable dt = new DataTable("Sales");
    dt.Columns.Add("OrderID", typeof(int));
    dt.Columns.Add("CustomerName", typeof(string));
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Quantity", typeof(int));
    dt.Columns.Add("UnitPrice", typeof(decimal));
    dt.Columns.Add("OrderDate", typeof(DateTime));
    // Sample data (normally from database)
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5));
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4));
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3));
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2));
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1));
    return dt;
}
// Export to Excel
WorkBook reportWorkbook = WorkBook.Create();
WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report");
// Get data from database
DataTable salesData = GetSalesData();
// Method 1: Manual mapping with formatting
reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy");
reportSheet.Merge("A1:F1");
reportSheet["A1"].Style.Font.Bold = true;
reportSheet["A1"].Style.Font.Height = 14;
// Headers
int headerRow = 3;
for (int col = 0; col < salesData.Columns.Count; col++)
{
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName);
}
// Format headers
var headers = reportSheet[$"A{headerRow}:F{headerRow}"];
headers.Style.Font.Bold = true;
headers.Style.SetBackgroundColor("#D9E1F2");
// Data rows
for (int row = 0; row < salesData.Rows.Count; row++)
{
    for (int col = 0; col < salesData.Columns.Count; col++)
    {
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]);
    }
    // Add total column with formula
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}
// Add total header and format
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency columns
reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
// Format date column
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";
// Add summary section
int summaryRow = headerRow + salesData.Rows.Count + 2;
reportSheet[$"A{summaryRow}"].Value = "Summary";
reportSheet[$"A{summaryRow}"].Style.Font.Bold = true;
reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:";
reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})";
reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:";
reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})";
reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00";
// Auto-fit columns
for (int col = 0; col <= 6; col++)
{
    reportSheet.AutoSizeColumn(col);
}
// Evaluate formulas and save
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
using System;
using System.Data;
using System.Data.SqlClient;
// Simulate database retrieval (replace with your actual database code)
DataTable GetSalesData()
{
    DataTable dt = new DataTable("Sales");
    dt.Columns.Add("OrderID", typeof(int));
    dt.Columns.Add("CustomerName", typeof(string));
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Quantity", typeof(int));
    dt.Columns.Add("UnitPrice", typeof(decimal));
    dt.Columns.Add("OrderDate", typeof(DateTime));
    // Sample data (normally from database)
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5));
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4));
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3));
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2));
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1));
    return dt;
}
// Export to Excel
WorkBook reportWorkbook = WorkBook.Create();
WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report");
// Get data from database
DataTable salesData = GetSalesData();
// Method 1: Manual mapping with formatting
reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy");
reportSheet.Merge("A1:F1");
reportSheet["A1"].Style.Font.Bold = true;
reportSheet["A1"].Style.Font.Height = 14;
// Headers
int headerRow = 3;
for (int col = 0; col < salesData.Columns.Count; col++)
{
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName);
}
// Format headers
var headers = reportSheet[$"A{headerRow}:F{headerRow}"];
headers.Style.Font.Bold = true;
headers.Style.SetBackgroundColor("#D9E1F2");
// Data rows
for (int row = 0; row < salesData.Rows.Count; row++)
{
    for (int col = 0; col < salesData.Columns.Count; col++)
    {
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]);
    }
    // Add total column with formula
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}
// Add total header and format
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency columns
reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
// Format date column
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";
// Add summary section
int summaryRow = headerRow + salesData.Rows.Count + 2;
reportSheet[$"A{summaryRow}"].Value = "Summary";
reportSheet[$"A{summaryRow}"].Style.Font.Bold = true;
reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:";
reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})";
reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:";
reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})";
reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00";
// Auto-fit columns
for (int col = 0; col <= 6; col++)
{
    reportSheet.AutoSizeColumn(col);
}
// Evaluate formulas and save
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
Imports System
Imports System.Data
Imports System.Data.SqlClient

' Simulate database retrieval (replace with your actual database code)
Function GetSalesData() As DataTable
    Dim dt As New DataTable("Sales")
    dt.Columns.Add("OrderID", GetType(Integer))
    dt.Columns.Add("CustomerName", GetType(String))
    dt.Columns.Add("Product", GetType(String))
    dt.Columns.Add("Quantity", GetType(Integer))
    dt.Columns.Add("UnitPrice", GetType(Decimal))
    dt.Columns.Add("OrderDate", GetType(DateTime))
    ' Sample data (normally from database)
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99D, DateTime.Now.AddDays(-5))
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99D, DateTime.Now.AddDays(-4))
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99D, DateTime.Now.AddDays(-3))
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99D, DateTime.Now.AddDays(-2))
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99D, DateTime.Now.AddDays(-1))
    Return dt
End Function

' Export to Excel
Dim reportWorkbook As WorkBook = WorkBook.Create()
Dim reportSheet As WorkSheet = reportWorkbook.CreateWorkSheet("Sales Report")

' Get data from database
Dim salesData As DataTable = GetSalesData()

' Method 1: Manual mapping with formatting
reportSheet("A1").Value = "Order Report - " & DateTime.Now.ToString("MMMM yyyy")
reportSheet.Merge("A1:F1")
reportSheet("A1").Style.Font.Bold = True
reportSheet("A1").Style.Font.Height = 14

' Headers
Dim headerRow As Integer = 3
For col As Integer = 0 To salesData.Columns.Count - 1
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns(col).ColumnName)
Next

' Format headers
Dim headers = reportSheet($"A{headerRow}:F{headerRow}")
headers.Style.Font.Bold = True
headers.Style.SetBackgroundColor("#D9E1F2")

' Data rows
For row As Integer = 0 To salesData.Rows.Count - 1
    For col As Integer = 0 To salesData.Columns.Count - 1
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows(row)(col))
    Next
    ' Add total column with formula
    reportSheet($"G{row + headerRow + 1}").Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}"
Next

' Add total header and format
reportSheet("G3").Value = "Total"
reportSheet("G3").Style.Font.Bold = True
reportSheet("G3").Style.SetBackgroundColor("#D9E1F2")

' Format currency columns
reportSheet($"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}").FormatString = "$#,##0.00"
reportSheet($"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}").FormatString = "$#,##0.00"

' Format date column
reportSheet($"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}").FormatString = "MM/dd/yyyy"

' Add summary section
Dim summaryRow As Integer = headerRow + salesData.Rows.Count + 2
reportSheet($"A{summaryRow}").Value = "Summary"
reportSheet($"A{summaryRow}").Style.Font.Bold = True
reportSheet($"A{summaryRow + 1}").Value = "Total Orders:"
reportSheet($"B{summaryRow + 1}").Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})"
reportSheet($"A{summaryRow + 2}").Value = "Total Revenue:"
reportSheet($"B{summaryRow + 2}").Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})"
reportSheet($"B{summaryRow + 2}").FormatString = "$#,##0.00"

' Auto-fit columns
For col As Integer = 0 To 6
    reportSheet.AutoSizeColumn(col)
Next

' Evaluate formulas and save
reportWorkbook.EvaluateAll()
reportWorkbook.SaveAs("DatabaseExport.xlsx")
$vbLabelText   $csharpLabel

Ten obszerny przykład ilustruje kompletny proces tworzenia plików Excel z bazy danych w języku C#. DataTable symuluje pobieranie danych z bazy danych — w środowisku produkcyjnym należy zastąpić to rzeczywistymi zapytaniami do bazy danych przy użyciu Entity Framework, Dapper lub ADO.NET Framework. Podejście oparte na ręcznym mapowaniu zapewnia pełną kontrolę nad formatowaniem i układem, zgodnie z zaleceniami Microsoftu dotyczącymi najlepszych praktyk w zakresie eksportu danych.

Kod tworzy profesjonalny raport z tytułem, sformatowanymi nagłówkami i wierszami danych. Kolumny formuł obliczają sumy wierszy dynamicznie. W sekcji podsumowania wykorzystano formuły programu Excel do zliczania zamówień i sumowania przychodów, co gwarantuje aktualizację tych wartości w przypadku zmiany danych. Formatowanie walut i dat jest zgodne ze standardami dokumentów biznesowych, a automatyczne dopasowywanie szerokości kolumn zapewnia prawidłowe wyświetlanie całej treści. Aby radzić sobie z większymi zbiorami danych, zapoznaj się z naszym przewodnikiem po optymalizacji wydajności.

Wynik

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 10 – Eksport bazy danych do pliku Excel

Chcesz usprawnić tworzenie raportów w Excelu? Zdobądź licencję, aby w pełni wykorzystać potencjał IronXL w środowisku produkcyjnym.

Jak radzić sobie z wieloma arkuszami?

Złożone pliki Excel często wymagają wielu arkuszy do uporządkowania powiązanych danych. IronXL upraszcza zarządzanie wieloma arkuszami dzięki intuicyjnym metodom tworzenia, uzyskiwania dostępu i organizowania arkuszy.

// Create a multi-sheet workbook
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet hrSheet = companyReport.CreateWorkSheet("HR Metrics");
// Populate Sales sheet
salesSheet["A1"].Value = "Sales Dashboard";
salesSheet["A3"].Value = "Region";
salesSheet["B3"].Value = "Q1 Sales";
salesSheet["C3"].Value = "Q2 Sales";
string[] regions = { "North", "South", "East", "West" };
decimal[] q1Sales = { 250000, 180000, 220000, 195000 };
decimal[] q2Sales = { 275000, 195000, 240000, 210000 };
for (int i = 0; i < regions.Length; i++)
{
    salesSheet[$"A{i + 4}"].Value = regions[i];
    salesSheet[$"B{i + 4}"].Value = q1Sales[i];
    salesSheet[$"C{i + 4}"].Value = q2Sales[i];
}
// Populate Inventory sheet
inventorySheet["A1"].Value = "Inventory Status";
inventorySheet["A3"].Value = "Product";
inventorySheet["B3"].Value = "Stock Level";
inventorySheet["C3"].Value = "Reorder Point";
inventorySheet["D3"].Value = "Status";
// Add inventory data with conditional status
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] stock = { 150, 45, 200 };
int[] reorderPoint = { 100, 50, 75 };
for (int i = 0; i < products.Length; i++)
{
    inventorySheet[$"A{i + 4}"].Value = products[i];
    inventorySheet[$"B{i + 4}"].Value = stock[i];
    inventorySheet[$"C{i + 4}"].Value = reorderPoint[i];
    // Status based on stock level
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    // Color code status
    if (status == "REORDER")
    {
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
    }
}
// Create summary sheet referencing other sheets
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");
summarySheet["A1"].Value = "Company Overview";
summarySheet["A3"].Value = "Metric";
summarySheet["B3"].Value = "Value";
summarySheet["A4"].Value = "Total Q1 Sales";
summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)";
summarySheet["A5"].Value = "Total Q2 Sales";
summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)";
summarySheet["A6"].Value = "Products Need Reorder";
summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")";
// Format all sheets consistently
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    // Format headers
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
    var headerRow = sheet["A3:D3"];
    headerRow.Style.Font.Bold = true;
    headerRow.Style.SetBackgroundColor("#E7E6E6");
}
// Save multi-sheet workbook
companyReport.SaveAs("CompanyReport.xlsx");
// Create a multi-sheet workbook
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet hrSheet = companyReport.CreateWorkSheet("HR Metrics");
// Populate Sales sheet
salesSheet["A1"].Value = "Sales Dashboard";
salesSheet["A3"].Value = "Region";
salesSheet["B3"].Value = "Q1 Sales";
salesSheet["C3"].Value = "Q2 Sales";
string[] regions = { "North", "South", "East", "West" };
decimal[] q1Sales = { 250000, 180000, 220000, 195000 };
decimal[] q2Sales = { 275000, 195000, 240000, 210000 };
for (int i = 0; i < regions.Length; i++)
{
    salesSheet[$"A{i + 4}"].Value = regions[i];
    salesSheet[$"B{i + 4}"].Value = q1Sales[i];
    salesSheet[$"C{i + 4}"].Value = q2Sales[i];
}
// Populate Inventory sheet
inventorySheet["A1"].Value = "Inventory Status";
inventorySheet["A3"].Value = "Product";
inventorySheet["B3"].Value = "Stock Level";
inventorySheet["C3"].Value = "Reorder Point";
inventorySheet["D3"].Value = "Status";
// Add inventory data with conditional status
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] stock = { 150, 45, 200 };
int[] reorderPoint = { 100, 50, 75 };
for (int i = 0; i < products.Length; i++)
{
    inventorySheet[$"A{i + 4}"].Value = products[i];
    inventorySheet[$"B{i + 4}"].Value = stock[i];
    inventorySheet[$"C{i + 4}"].Value = reorderPoint[i];
    // Status based on stock level
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    // Color code status
    if (status == "REORDER")
    {
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
    }
}
// Create summary sheet referencing other sheets
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");
summarySheet["A1"].Value = "Company Overview";
summarySheet["A3"].Value = "Metric";
summarySheet["B3"].Value = "Value";
summarySheet["A4"].Value = "Total Q1 Sales";
summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)";
summarySheet["A5"].Value = "Total Q2 Sales";
summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)";
summarySheet["A6"].Value = "Products Need Reorder";
summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")";
// Format all sheets consistently
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    // Format headers
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
    var headerRow = sheet["A3:D3"];
    headerRow.Style.Font.Bold = true;
    headerRow.Style.SetBackgroundColor("#E7E6E6");
}
// Save multi-sheet workbook
companyReport.SaveAs("CompanyReport.xlsx");
Imports System

' Create a multi-sheet workbook
Dim companyReport As WorkBook = WorkBook.Create()
' Create department sheets
Dim salesSheet As WorkSheet = companyReport.CreateWorkSheet("Sales")
Dim inventorySheet As WorkSheet = companyReport.CreateWorkSheet("Inventory")
Dim hrSheet As WorkSheet = companyReport.CreateWorkSheet("HR Metrics")
' Populate Sales sheet
salesSheet("A1").Value = "Sales Dashboard"
salesSheet("A3").Value = "Region"
salesSheet("B3").Value = "Q1 Sales"
salesSheet("C3").Value = "Q2 Sales"
Dim regions As String() = {"North", "South", "East", "West"}
Dim q1Sales As Decimal() = {250000D, 180000D, 220000D, 195000D}
Dim q2Sales As Decimal() = {275000D, 195000D, 240000D, 210000D}
For i As Integer = 0 To regions.Length - 1
    salesSheet($"A{i + 4}").Value = regions(i)
    salesSheet($"B{i + 4}").Value = q1Sales(i)
    salesSheet($"C{i + 4}").Value = q2Sales(i)
Next
' Populate Inventory sheet
inventorySheet("A1").Value = "Inventory Status"
inventorySheet("A3").Value = "Product"
inventorySheet("B3").Value = "Stock Level"
inventorySheet("C3").Value = "Reorder Point"
inventorySheet("D3").Value = "Status"
' Add inventory data with conditional status
Dim products As String() = {"Widget A", "Widget B", "Widget C"}
Dim stock As Integer() = {150, 45, 200}
Dim reorderPoint As Integer() = {100, 50, 75}
For i As Integer = 0 To products.Length - 1
    inventorySheet($"A{i + 4}").Value = products(i)
    inventorySheet($"B{i + 4}").Value = stock(i)
    inventorySheet($"C{i + 4}").Value = reorderPoint(i)
    ' Status based on stock level
    Dim status As String = If(stock(i) <= reorderPoint(i), "REORDER", "OK")
    inventorySheet($"D{i + 4}").Value = status
    ' Color code status
    If status = "REORDER" Then
        inventorySheet($"D{i + 4}").Style.Font.Color = "#FF0000"
    End If
Next
' Create summary sheet referencing other sheets
Dim summarySheet As WorkSheet = companyReport.CreateWorkSheet("Summary")
summarySheet("A1").Value = "Company Overview"
summarySheet("A3").Value = "Metric"
summarySheet("B3").Value = "Value"
summarySheet("A4").Value = "Total Q1 Sales"
summarySheet("B4").Formula = "=SUM(Sales!B4:B7)"
summarySheet("A5").Value = "Total Q2 Sales"
summarySheet("B5").Formula = "=SUM(Sales!C4:C7)"
summarySheet("A6").Value = "Products Need Reorder"
summarySheet("B6").Formula = "=COUNTIF(Inventory!D4:D6,""REORDER"")"
' Format all sheets consistently
For Each sheet As WorkSheet In companyReport.WorkSheets
    ' Format headers
    sheet("A1").Style.Font.Bold = True
    sheet("A1").Style.Font.Height = 14
    Dim headerRow = sheet("A3:D3")
    headerRow.Style.Font.Bold = True
    headerRow.Style.SetBackgroundColor("#E7E6E6")
Next
' Save multi-sheet workbook
companyReport.SaveAs("CompanyReport.xlsx")
$vbLabelText   $csharpLabel

Ten przykład tworzy kompletny raport wielostronicowy. Każdy arkusz służy konkretnemu celowi: danym sprzedażowym, śledzeniu zapasów i wskaźnikom kadrowym. Arkusz podsumowujący konsoliduje kluczowe wskaźniki przy użyciu formuł międzyarkuszowych. Zwróć uwagę, że składnia odwołania do arkusza w formułach "Sales!B4:B7" odnosi się do komórek od B4 do B7 w arkuszu Sales.

Arkusz inwentaryzacyjny wykorzystuje logikę warunkówą, zaznaczając na czerwono pozycje o niskim stanie magazynowym, aby zwrócić na nie natychmiastową uwagę. Pętla foreach stosuje spójne formatowanie we wszystkich arkuszach, zapewniając profesjonalny wygląd całego skoroszytu. Nazwy arkuszy pojawiają się w programie Excel jako zakładki, co pozwala użytkownikom na łatwe przechodzenie między różnymi widokami danych.

Jakie są najlepsze praktyki dotyczące generowania plików Excel?

Wydajne generowanie plików Excel w języku C# wymaga przemyślanego podejścia do wykorzystania pamięci, obsługi błędów i wdrażania. Te praktyki zapewniają skuteczne skalowanie aplikacji przy zachowaniu niezawodności podczas programowego tworzenia arkuszy kalkulacyjnych Excel.

Zarządzanie pamięcią staje się kluczowe w przypadku dużych plików. Zamiast ładować całe zbiory danych do pamięci, przetwarzaj dane w fragmentach:

// Process large datasets efficiently
public void ExportLargeDataset(string filename)
{
    WorkBook workbook = WorkBook.Create();
    WorkSheet sheet = workbook.CreateWorkSheet("Data");
    int rowsPerBatch = 1000;
    int currentRow = 1;
    // Process in batches
    foreach (var batch in GetDataInBatches(rowsPerBatch))
    {
        foreach (var record in batch)
        {
            sheet[$"A{currentRow}"].Value = record.Id;
            sheet[$"B{currentRow}"].Value = record.Name;
            sheet[$"C{currentRow}"].Value = record.Value;
            currentRow++;
        }
    }
    workbook.SaveAs(filename);
}
// Process large datasets efficiently
public void ExportLargeDataset(string filename)
{
    WorkBook workbook = WorkBook.Create();
    WorkSheet sheet = workbook.CreateWorkSheet("Data");
    int rowsPerBatch = 1000;
    int currentRow = 1;
    // Process in batches
    foreach (var batch in GetDataInBatches(rowsPerBatch))
    {
        foreach (var record in batch)
        {
            sheet[$"A{currentRow}"].Value = record.Id;
            sheet[$"B{currentRow}"].Value = record.Name;
            sheet[$"C{currentRow}"].Value = record.Value;
            currentRow++;
        }
    }
    workbook.SaveAs(filename);
}
' Process large datasets efficiently
Public Sub ExportLargeDataset(filename As String)
    Dim workbook As WorkBook = WorkBook.Create()
    Dim sheet As WorkSheet = workbook.CreateWorkSheet("Data")
    Dim rowsPerBatch As Integer = 1000
    Dim currentRow As Integer = 1
    ' Process in batches
    For Each batch In GetDataInBatches(rowsPerBatch)
        For Each record In batch
            sheet($"A{currentRow}").Value = record.Id
            sheet($"B{currentRow}").Value = record.Name
            sheet($"C{currentRow}").Value = record.Value
            currentRow += 1
        Next
    Next
    workbook.SaveAs(filename)
End Sub
$vbLabelText   $csharpLabel

Obsługa błędów zapobiega awariom aplikacji i zapewnia przydatne informacje zwrotne podczas generowania plików Excel:

try
{
    WorkBook workbook = WorkBook.Create();
    // Excel generation code
    workbook.SaveAs("output.xlsx");
}
catch (Exception ex)
{
    // Log the error
    Console.WriteLine($"Excel generation failed: {ex.Message}");
    // Implement appropriate recovery or notification
}
try
{
    WorkBook workbook = WorkBook.Create();
    // Excel generation code
    workbook.SaveAs("output.xlsx");
}
catch (Exception ex)
{
    // Log the error
    Console.WriteLine($"Excel generation failed: {ex.Message}");
    // Implement appropriate recovery or notification
}
Imports System

Try
    Dim workbook As WorkBook = WorkBook.Create()
    ' Excel generation code
    workbook.SaveAs("output.xlsx")
Catch ex As Exception
    ' Log the error
    Console.WriteLine($"Excel generation failed: {ex.Message}")
    ' Implement appropriate recovery or notification
End Try
$vbLabelText   $csharpLabel

W przypadku aplikacji internetowych generuj pliki Excel w pamięci i przesyłaj je strumieniowo do użytkowników:

// ASP.NET Core example
public IActionResult DownloadExcel()
{
    WorkBook workbook = GenerateReport();
    var stream = new MemoryStream();
    workbook.SaveAs(stream);
    stream.Position = 0;
    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx");
}
// ASP.NET Core example
public IActionResult DownloadExcel()
{
    WorkBook workbook = GenerateReport();
    var stream = new MemoryStream();
    workbook.SaveAs(stream);
    stream.Position = 0;
    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx");
}
Imports System.IO
Imports Microsoft.AspNetCore.Mvc

Public Function DownloadExcel() As IActionResult
    Dim workbook As WorkBook = GenerateReport()
    Dim stream As New MemoryStream()
    workbook.SaveAs(stream)
    stream.Position = 0
    Return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx")
End Function
$vbLabelText   $csharpLabel

Uwzględnienie kwestii związanych z wdrożeniem zapewnia płynne działanie środowiska produkcyjnego. IronXL działa w środowiskach o ograniczonych uprawnieniach, bez konieczności posiadania uprawnień administratora, dzięki czemu nadaje się do hostingu współdzielonego i wdrożeń kontenerowych. Dołącz plik licencji IronXL do pakietu instalacyjnego i upewnij się, że aplikacja ma uprawnienia do zapisu w celu obsługi plików tymczasowych, jeśli to konieczne. Aby uzyskać dodatkowe wskazówki dotyczące wdrażania, zapoznaj się z dokumentacją wdrożeniową.

Wnioski

IronXL zmienia generowanie plików Excel w języku C# ze skomplikówanego wyzwania w proste kodowanie. Nauczyłeś się tworzyć skoroszyty, wypełniać komórki, stosować formatowanie, używać formuł i eksportować dane z baz danych — wszystko to bez konieczności korzystania z pakietu Microsoft Office. Te techniki programowego generowania plików Excel działają spójnie w systemach Windows, Linux i na platformach chmurowych.

Chcesz wdrożyć generowanie plików Excel w swoich aplikacjach C#? Rozpocznij bezpłatny okres próbny lub zapoznaj się z obszerną dokumentacją API, aby poznać zaawansowane funkcje. W przypadku wdrożeń produkcyjnych zapoznaj się z opcjami licencyjnymi, które odpowiadają wymaganiom Twojego projektu.

Jak wygenerować plik Excel w języku C# przy użyciu IronXL: Ilustracja 11 – Licencjonowanie

Często Zadawane Pytania

Czym jest IronXL?

Biblioteka IronXL to potężna biblioteka do tworzenia, odczytu i edycji plików Excel w aplikacjach .NET bez konieczności korzystania z pakietu Microsoft Office lub skomplikowanej interoperacyjności COM.

Jak mogę tworzyć pliki Excel w języku C# przy użyciu IronXL?

Dzięki IronXL można programowo generować pliki Excel w języku C#, korzystając z przyjaznego dla użytkownika interfejsu API. Obejmuje to tworzenie arkuszy kalkulacyjnych, stosowanie formatowania oraz integrację z bazami danych.

Czy do korzystania z IronXL muszę mieć zainstalowany pakiet Microsoft Office?

Nie, IronXL nie wymaga pakietu Microsoft Office. Pozwala na tworzenie i edycję plików Excel bez żadnych zależności od pakietu Office.

Czy IronXL obsługuje zarówno formaty plików XLS, jak i XLSX?

Tak, IronXL obsługuje zarówno formaty plików XLS, jak i XLSX, umożliwiając płynną pracę z szeroką gamą plików Excel.

Czy IronXL nadaje się do tworzenia raportów i eksportowania danych?

Oczywiście, IronXL idealnie nadaje się do generowania raportów i eksportowania danych do plików Excel dzięki swoim rozbudowanym funkcjom i możliwościom płynnej integracji.

Jakie opcje formatowania oferuje IronXL?

IronXL oferuje zaawansowane opcje formatowania, w tym stylizację komórek, formatowanie warunkowe i wiele innych, co pozwala tworzyć atrakcyjne wizualnie i dobrze zorganizowane dokumenty Excel.

Czy za pomocą IronXL mogę zautomatyzować generowanie arkuszy kalkulacyjnych?

Tak, IronXL umożliwia automatyzację procesów generowania arkuszy kalkulacyjnych, ułatwiając wydajną obsługę dużych zbiorów danych i powtarzalnych zadań.

Czy IronXL jest kompatybilny zarówno z Visual Basic, jak i C#?

Tak, IronXL może być używany zarówno z C#, jak i Visual Basic, zapewniając elastyczność programistom pracującym z różnymi językami programowania w środowisku .NET.

W jaki sposób IronXL integruje się z bazami danych?

IronXL umożliwia łatwą integrację z bazami danych, pozwalając na importowanie i eksportowanie danych między plikami Excel a systemami baz danych przy minimalnym wysiłku.

Gdzie mogę znaleźć samouczek dotyczący korzystania z IronXL w aplikacjach .NET?

Na stronie internetowej Iron Software można znaleźć obszerny samouczek dotyczący korzystania z IronXL for .NET w aplikacjach .NET, który przeprowadzi użytkownika przez proces tworzenia i edycji plików Excel, od podstawowych do zaawansowanych.

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