
Tworzenie raportów Excel w C# za pomocą IronXL
Tworzenie raportów Excel w języku C# jest podstawowym wymogiem we współczesnym biznesie i aplikacjach .NET. Niezależnie od tego, czy generujesz sprawozdania finansowe, analizy sprzedaży czy pulpity nawigacyjne dotyczące zapasów, automatyzacja procesu tworzenia plików i arkuszy kalkulacyjnych Excel pozwala zaoszczędzić wiele godzin pracy ręcznej, jednocześnie ograniczając liczbę błędów.
IronXL zapewnia programistom potężne, intuicyjne rozwiązanie do tworzenia raportów Excel w języku C# bez konieczności korzystania z pakietu Microsoft Office, programu MS Excel lub tradycyjnych zależności Interop. W przeciwieństwie do OLE Automation lub rozwiązań opartych na aplikacji Excel, IronXL umożliwia generowanie skoroszytów Excel i danych Excel bezpośrednio w kodzie za pomocą zaledwie jednej linii w razie potrzeby. W tym przewodniku nauczymy Cię, jak tworzyć raporty Excel z IronXL, wraz z łatwymi do naśladowania przykładowymi kodami, które możesz łatwo zaimplementować w swoich własnych projektach!
Czym jest IronXL i dlaczego warto go używać do generowania plików Excel?
IronXL jest biblioteką Excel dla .NET, która umożliwia deweloperom tworzenie, czytanie i manipulowanie arkuszami Excel bezpośrednio z kodu źródłowego C# lub Visual Basic. W przeciwieństwie do rozwiązań Microsoft Office Interop, które opierają się na pełnej aplikacji Excel lub inżynierii odwrotnej za pomocą Open XML SDK, IronXL działa w systemach Windows, Linux, macOS oraz w środowiskach chmurowych bez konieczności instalacji programu Excel lub zależności od oprogramowania innych firm. Dzięki temu idealnie nadaje się do raportów Excel po stronie serwera, zautomatyzowanych przepływów pracy oraz aplikacji internetowych zbudowanych na platformie .NET Core lub .NET Framework.
Dla zespołów przechodzących z ręcznych procesów w Excelu, starszych bibliotek lub przepływów pracy w narzędziach biurowych Open XML, które wymagają poruszania się po różnych przestrzeniach nazw XML, IronXL zapewnia intuicyjny interfejs API. Obsługuje zarówno starsze pliki XLS, jak i nowoczesne pliki XLSX, które są w zasadzie plikami ZIP zawierającymi pliki XML i różne foldery. Niezależnie od tego, czy chcesz wygenerować nowy skoroszyt Excel, manipulować wieloma arkuszami, czy załadować dane Excel z zewnętrznego kodu, IronXL drastycznie upraszcza proces, nie wymagając zrozumienia wewnętrznych formatów.
Pierwsze kroki z IronXL w celu utworzenia pliku Excel
Konfiguracja IronXL do tworzenia raportów w Excelu zajmuje zaledwie kilka minut. Zainstaluj bibliotekę za pomocą menedżera pakietów NuGet w Visual Studio:
Pobierz IronXL już dziś i zacznij automatyzować generowanie raportów w Excelu.
Po zainstalowaniu utworzenie pierwszego raportu w Excelu wymaga zaledwie kilku wierszy kodu:
using IronXL;
// Create a new Excel workbook for reports
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet for the report
WorkSheet reportSheet = workBook.CreateWorkSheet("Monthly Report");
// Add a title
reportSheet["A1"].Value = "Sales Report - January 2024";
reportSheet["A1"].Style.Font.Bold = true;
// Save the Excel report
workBook.SaveAs("MonthlyReport.xlsx");Imports IronXL
' Create a new Excel workbook for reports
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a worksheet for the report
Dim reportSheet As WorkSheet = workBook.CreateWorkSheet("Monthly Report")
' Add a title
reportSheet("A1").Value = "Sales Report - January 2024"
reportSheet("A1").Style.Font.Bold = True
' Save the Excel report
workBook.SaveAs("MonthlyReport.xlsx")Ten kod tworzy nowy plik raportu Excel z sformatowanym tytułem. Znana skladnia odwolania do komorki (reportSheet["A1"]) ulatwia programistom okreslenie dokladnie, gdzie powinny pojawic sie dane, podobnie jak w przypadku pracy z Excelem manualnie.
Wynik

Ładowanie danych z wielu źródeł
W rzeczywistych raportach Excel rzadko wykorzystuje się dane statyczne. IronXL doskonale radzi sobie z integracją danych Excel z różnych formatów, interfejsów API, nowych źródeł DataTable, a nawet kilku różnych plików XML. Dzięki temu idealnie nadaje się do dynamicznego generowania raportów w formacie Excel w języku C# w aplikacjach serwerowych lub internetowych.
Integracja baz danych
Dla raportów Excel opartych na bazie danych, IronXL płynnie współpracuje z ADO.NET DataTables:
using System.Data;
using System.Data.SqlClient;
// Fetch data from database
string connectionString = "Server=localhost;Database=Sales;Integrated Security=true;";
DataTable salesData = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT ProductName, Quantity, Revenue FROM MonthlySales", conn);
adapter.Fill(salesData);
}
// Create Excel report from DataTable
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Sales Data");
// Add headers
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Revenue";
// Populate data
int row = 2;
foreach (DataRow dataRow in salesData.Rows)
{
sheet[$"A{row}"].Value = dataRow["ProductName"];
sheet[$"B{row}"].Value = dataRow["Quantity"];
sheet[$"C{row}"].Value = dataRow["Revenue"];
row++;
}Imports System.Data
Imports System.Data.SqlClient
' Fetch data from database
Dim connectionString As String = "Server=localhost;Database=Sales;Integrated Security=true;"
Dim salesData As New DataTable()
Using conn As New SqlConnection(connectionString)
Dim adapter As New SqlDataAdapter("SELECT ProductName, Quantity, Revenue FROM MonthlySales", conn)
adapter.Fill(salesData)
End Using
' Create Excel report from DataTable
Dim workBook As WorkBook = WorkBook.Create()
Dim sheet As WorkSheet = workBook.CreateWorkSheet("Sales Data")
' Add headers
sheet("A1").Value = "Product"
sheet("B1").Value = "Quantity"
sheet("C1").Value = "Revenue"
' Populate data
Dim row As Integer = 2
For Each dataRow As DataRow In salesData.Rows
sheet($"A{row}").Value = dataRow("ProductName")
sheet($"B{row}").Value = dataRow("Quantity")
sheet($"C{row}").Value = dataRow("Revenue")
row += 1
NextTo podejście ładuje dane sprzedażowe bezpośrednio z serwera SQL do raportu w programie Excel. Integracja z DataTable oznacza, że można korzystać z istniejącego kodu dostępu do danych bez konieczności wprowadzania zmian. W przypadku bardziej złożonych scenariuszy sprawdź, jak wczytać plik Excel z baz danych SQL.
Praca z kolekcjami
Dla danych w pamięci, danych Excel z odpowiedzi API lub nowej DataTable, kolekcje mogą łatwo wypełniać arkusze Excel bez Microsoft Excel lub zależności stron trzecich:
var salesRecords = new List<SalesRecord>
{
new SalesRecord { Product = "Widget A", Units = 150, Price = 29.99m },
new SalesRecord { Product = "Widget B", Units = 82, Price = 49.99m }
};
// Convert collection to Excel
for (int i = 0; i < salesRecords.Count; i++)
{
sheet[$"A{i+2}"].Value = salesRecords[i].Product;
sheet[$"B{i+2}"].Value = salesRecords[i].Units;
sheet[$"C{i+2}"].Value = salesRecords[i].Price;
}Imports System.Collections.Generic
Dim salesRecords As New List(Of SalesRecord) From {
New SalesRecord With {.Product = "Widget A", .Units = 150, .Price = 29.99D},
New SalesRecord With {.Product = "Widget B", .Units = 82, .Price = 49.99D}
}
' Convert collection to Excel
For i As Integer = 0 To salesRecords.Count - 1
sheet($"A{i + 2}").Value = salesRecords(i).Product
sheet($"B{i + 2}").Value = salesRecords(i).Units
sheet($"C{i + 2}").Value = salesRecords(i).Price
NextMetoda ta pozwala na tworzenie raportów Excel w języku C# bezpośrednio w aplikacji .NET, co znacznie upraszcza proces generowania wielu arkuszy lub plików XLSX w porównaniu z ręczną automatyzacją OLE lub inżynierią odwrotną plików XML.
Wynik

Formatowanie profesjonalnych raportów w programie Excel
Same surowe dane nie wystarczą do stworzenia profesjonalnego raportu. IronXL zapewnia kompleksowe opcje formatowania komórek, umożliwiające tworzenie dopracowanych, gotowych do użytku biznesowego plików Excel. Poniższy kod pokazuje, jak łatwo to zrobić za pomocą IronXL:
using IronXL;
using IronXL.Styles;
class Program
{
static void Main(string[] args)
{
// Create a new workbook
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a new worksheet
var sheet = workbook.CreateWorkSheet("MySheet");
// Add header values
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Price";
// Add sample data rows
sheet["A2"].Value = "Laptop";
sheet["B2"].Value = 5;
sheet["C2"].Value = 1299.99;
sheet["A3"].Value = "Headphones";
sheet["B3"].Value = 15;
sheet["C3"].Value = 199.50;
sheet["A4"].Value = "Keyboard";
sheet["B4"].Value = 10;
sheet["C4"].Value = 89.99;
sheet["A5"].Value = "Monitor";
sheet["B5"].Value = 7;
sheet["C5"].Value = 249.00;
// Header formatting
var headerRange = sheet["A1:C1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
headerRange.Style.BottomBorder.Type = BorderType.Thick;
// Number formatting for currency
sheet["C:C"].FormatString = "$#,##0.00";
// Alternating row colors for readability
for (int row = 2; row <= 10; row++)
{
if (row % 2 == 0)
{
sheet[$"A{row}:C{row}"].Style.SetBackgroundColor("#F2F2F2");
}
}
// Column width adjustment
sheet.Columns[0].Width = 15 * 256; // Width in 1/256th of character width
sheet.Columns[2].Width = 12 * 256;
// Add borders around data
var dataRange = sheet["A1:C10"];
dataRange.Style.TopBorder.Type = BorderType.Thin;
dataRange.Style.RightBorder.Type = BorderType.Thin;
dataRange.Style.BottomBorder.Type = BorderType.Thin;
dataRange.Style.LeftBorder.Type = BorderType.Thin;
// Save the workbook to a file
workbook.SaveAs("MyWorkbook.xlsx");
}
}Imports IronXL
Imports IronXL.Styles
Module Program
Sub Main(args As String())
' Create a new workbook
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a new worksheet
Dim sheet = workbook.CreateWorkSheet("MySheet")
' Add header values
sheet("A1").Value = "Product"
sheet("B1").Value = "Quantity"
sheet("C1").Value = "Price"
' Add sample data rows
sheet("A2").Value = "Laptop"
sheet("B2").Value = 5
sheet("C2").Value = 1299.99
sheet("A3").Value = "Headphones"
sheet("B3").Value = 15
sheet("C3").Value = 199.5
sheet("A4").Value = "Keyboard"
sheet("B4").Value = 10
sheet("C4").Value = 89.99
sheet("A5").Value = "Monitor"
sheet("B5").Value = 7
sheet("C5").Value = 249.0
' Header formatting
Dim headerRange = sheet("A1:C1")
headerRange.Style.Font.Bold = True
headerRange.Style.SetBackgroundColor("#4472C4")
headerRange.Style.Font.Color = "#FFFFFF"
headerRange.Style.BottomBorder.Type = BorderType.Thick
' Number formatting for currency
sheet("C:C").FormatString = "$#,##0.00"
' Alternating row colors for readability
For row As Integer = 2 To 10
If row Mod 2 = 0 Then
sheet($"A{row}:C{row}").Style.SetBackgroundColor("#F2F2F2")
End If
Next
' Column width adjustment
sheet.Columns(0).Width = 15 * 256 ' Width in 1/256th of character width
sheet.Columns(2).Width = 12 * 256
' Add borders around data
Dim dataRange = sheet("A1:C10")
dataRange.Style.TopBorder.Type = BorderType.Thin
dataRange.Style.RightBorder.Type = BorderType.Thin
dataRange.Style.BottomBorder.Type = BorderType.Thin
dataRange.Style.LeftBorder.Type = BorderType.Thin
' Save the workbook to a file
workbook.SaveAs("MyWorkbook.xlsx")
End Sub
End ModuleTe opcje formatowania przekształcają podstawowe dane w profesjonalne raporty. API stylu obejmuje wszystko, od czcionek i kolorów po obramowania i wyrównanie, zapewniając pełną kontrolę nad wyglądem raportu w Excelu. W przypadku zaawansowanych potrzeb związanych z formatowaniem warto zapoznać się z formatowaniem warunkowym, które pozwala automatycznie wyróżniać ważne dane.

Wykorzystanie formuł do dynamicznych obliczeń w raportach Excel
Siła programu Excel tkwi w jego formułach, a IronXL w pełni obsługuje tworzenie formuł w Excelu:
// Add formula for row totals
sheet["D1"].Value = "Total";
sheet["D2"].Formula = "=B2*C2";
// Copy formula down the column
for (int row = 3; row <= 10; row++)
{
sheet[$"D{row}"].Formula = $"=B{row}*C{row}";
}
// Add summary formulas
sheet["A12"].Value = "Summary";
sheet["B12"].Formula = "=SUM(B2:B10)";
sheet["C12"].Formula = "=AVERAGE(C2:C10)";
sheet["D12"].Formula = "=SUM(D2:D10)";' Add formula for row totals
sheet("D1").Value = "Total"
sheet("D2").Formula = "=B2*C2"
' Copy formula down the column
For row As Integer = 3 To 10
sheet($"D{row}").Formula = $"=B{row}*C{row}"
Next
' Add summary formulas
sheet("A12").Value = "Summary"
sheet("B12").Formula = "=SUM(B2:B10)"
sheet("C12").Formula = "=AVERAGE(C2:C10)"
sheet("D12").Formula = "=SUM(D2:D10)"Wsparcie dla formuł obejmuje wszystkie standardowe funkcje Excela, takie jak SUM, AVERAGE, IF, VLOOKUP i wiecej. IronXL automatycznie obsługuje zależności między formułami i kolejność obliczeń, dzięki czemu generowanie raportów w Excelu zawierających złożone obliczenia staje się proste. Dowiedz się więcej o funkcjach matematycznych w IronXL.

Raporty oparte na szablonach
W przypadku powtarzających się raportów Excel lub standardowych skoroszytów IronXL obsługuje generowanie oparte na szablonach, umożliwiając programistom tworzenie plików Excel z szablonu bez konieczności korzystania z Open XML SDK, plików rels lub różnych folderów:
// Load existing template
Workbook templateBook = Workbook.Load("ReportTemplate.xlsx");
Worksheet templateSheet = templateBook.DefaultWorksheet;
// Find and replace template markers
foreach (var cell in templateSheet["A1:Z100"])
{
if (cell.Text.Contains("{{CompanyName}}"))
cell.Value = cell.Text.Replace("{{CompanyName}}", "Acme Corp");
if (cell.Text.Contains("{{ReportDate}}"))
cell.Value = cell.Text.Replace("{{ReportDate}}", DateTime.Now.ToString("MMMM yyyy"));
}
// Save as new report
templateBook.SaveAs($"Report_{DateTime.Now:yyyyMMdd}.xlsx");Imports System
' Load existing template
Dim templateBook As Workbook = Workbook.Load("ReportTemplate.xlsx")
Dim templateSheet As Worksheet = templateBook.DefaultWorksheet
' Find and replace template markers
For Each cell In templateSheet("A1:Z100")
If cell.Text.Contains("{{CompanyName}}") Then
cell.Value = cell.Text.Replace("{{CompanyName}}", "Acme Corp")
End If
If cell.Text.Contains("{{ReportDate}}") Then
cell.Value = cell.Text.Replace("{{ReportDate}}", DateTime.Now.ToString("MMMM yyyy"))
End If
Next
' Save as new report
templateBook.SaveAs($"Report_{DateTime.Now:yyyyMMdd}.xlsx")Takie podejście pozwala zachować spójne formatowanie przy aktualizacji treści dynamicznych, co idealnie sprawdza się w przypadku raportów miesięcznych lub dokumentów standardowych.

Najlepsze praktyki i rozwiązywanie problemów
Podczas wdrażania generowania raportów w Excelu należy pamiętać o następujących wskazówkach:
- Zużycie pamięci przy dużych plikach: Przetwarzaj dane w kawałkach zamiast ładowania całych zbiorów danych (rekomendacje Microsoftu dla dużych plików Excel)
- Problemy z formatowaniem dat: Uzyj
DateTime.ToOADate()dla dat zgodnych z Excelem (Wyjasnienie systemu dat w Excelu) - Bledy blokowania plikow: Zawsze poprawnie zwalniaj obiekty Excel za pomoca instrukcji
usinglub nowych podejscMemoryStream. - Brakujące style: Niektóre właściwości stylu wymagają najpierw ustawienia koloru tła
Wnioski
IronXL zmienia generowanie raportów w Excelu z żmudnego, ręcznego procesu w zautomatyzowany, niezawodny przepływ pracy. Dzięki intuicyjnemu API, obsłudze wielu platform i kompleksowemu zestawowi funkcji programiści mogą tworzyć profesjonalne raporty w Excelu w ciągu kilku minut, a nie godzin. Połączenie łatwej integracji danych, rozbudowanych opcji formatowania i obsługi formuł sprawia, że IronXL jest niezbędnym narzędziem dla każdego programisty C# pracującego z raportami Excel. Dla zainteresowanych deweloperów, IronXL oferuje bezpłatną wersję próbną oraz dalsze opcje licencyjne dla firm i osób indywidualnych.

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.
Powiązane artykuły



