How to Create an Excel File in C#

How to Create an Excel File in C# (.NET Tutorial)

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronXL to potężna biblioteka Excel dla C# i .NET, która pozwala na programatyczne tworzenie, odczytywanie i edytowanie arkuszy kalkulacyjnych XLSX — bez Microsoft Office ani zależności Interop. Obsługuje .NET 8, .NET 9, .NET Core, .NET Framework i działa na Windows, Linux, macOS, Azure i AWS.

Ten samouczek prowadzi Cię przez budowę kompletnego skoroszytu Excel w C#: ustawianie wartości komórek, aplikowanie formatowania, dodawanie formuł i eksport do XLSX, CSV i więcej — z przykładami kodu krok po kroku.

Szybki start: Tworzenie pliku Excel

Użyj IronXL, aby szybko utworzyć nowy plik Excel — wystarczy wybrać format, dodać arkusz, ustawić dowolną wartość komórki i zapisać. To najszybszy sposób na generowanie plików XLSX za pomocą intuicyjnych wywołań API i bez problemów z interop.

  1. Install IronXL with NuGet Package Manager

    PM > Install-Package IronXl.Excel
  2. Skopiuj i uruchom ten fragment kodu.

    WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronXL w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Czym jest IronXL i dlaczego używać go do tworzenia plików Excel?

IronXL to intuicyjne API Excel dla C# i VB, które umożliwia czytanie, edytowanie i tworzenie plików arkuszy kalkulacyjnych Excel w .NET z wyjątkową wydajnością. W przeciwieństwie do tradycyjnych podejść, nie ma potrzeby instalowania Microsoft Office ani używania Interop Excel, co upraszcza wdrażanie i czyni je bardziej niezawodnym.

IronXL w pełni obsługuje .NET 9, .NET 8, .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS i środowiska Azure.

Funkcje IronXL

  • Bezpośrednie wsparcie od naszego zespołu deweloperów .NET
  • Szybka instalacja za pomocą Microsoft Visual Studio
  • DARMOWE dla rozwoju. Licencje od $799

Jak szybko utworzyć i zapisać plik Excel?

Zainstaluj IronXL przez NuGet lub pobierz DLL bezpośrednio. Klasa WorkBook jest punktem wyjścia do wszystkich operacji Excel, podczas gdy klasa WorkSheet dostarcza metody do manipulacji poszczególnymi arkuszami — pełna instrukcja krok po kroku zaczyna się w Kroku 1 poniżej.


Jak zainstalować bibliotekę IronXL C#?

Zainstaluj IronXL przez Menedżera Pakietów NuGet w Visual Studio lub użyj Konsoli Menedżera Pakietów:

Install-Package IronXl.Excel

Uzyskaj dostęp do Menedżera Pakietów NuGet przez menu Projekt lub klikając prawym przyciskiem myszy na projekt w Eksploratorze Rozwiązań.

Menu Projekt w Visual Studio z opcją Zarządzaj Pakietami NuGet

Rysunek 3Uzyskaj dostęp do Menedżera Pakietów NuGet przez menu Projekt

Menu kontekstowe Eksploratora Rozwiązań wyświetlające opcję Zarządzaj Pakietami NuGet

Rysunek 4Menu kontekstowe po kliknięciu prawym przyciskiem w Eksploratorze Rozwiązań


Znajdź IronXL.Excel na liście pakietów i kliknij Zainstaluj.


Menedżer Pakietów NuGet pokazujący pakiet IronXL.Excel gotowy do instalacji

Rysunek 5Instalacja IronXL.Excel przez Menedżera Pakietów NuGet

Alternatywnie, pobierz DLL IronXL bezpośrednio i dodaj jako odniesienie do swojego projektu przez Eksplorator Rozwiązań > Odniesienia > Wyszukaj IronXL.dll.

Strona pobierania IronXL pokazująca instrukcje instalacji i przycisk pobierania

Rysunek 6Pobierz bibliotekę IronXL z oficjalnej strony

{i:(IronXL nie wymaga instalacji Microsoft Office ani Interop Excel — działa na każdej platformie obsługiwanej przez .NET, w tym Windows, Linux, macOS i środowiska chmurowe.)}


Jak skonfigurować projekt .NET?

IronXL działa z każdym typem projektu .NET — aplikacjami konsolowymi, aplikacjami webowymi ASP.NET, API czy narzędziami desktopowymi. Poniższy przykład używa Aplikacji Webowej ASP.NET, ale proces jest taki sam dla wszystkich szablonów projektów.

Postępuj zgodnie z tymi krokami, aby utworzyć stronę internetową ASP.NET:

  1. Otwórz Visual Studio
  2. Kliknij Plik > Nowy Projekt
  3. Wybierz Web w kategorii Visual C# na liście typów projektów
  4. Wybierz Aplikację Webową ASP.NET


    Okno dialogowe Nowy Projekt w Visual Studio z wybraną Aplikacją Webową ASP.NET

    Rysunek 1Utwórz nowy projekt ASP.NET

  5. Kliknij OK
  6. Wybierz szablon Web Forms

    Szablon projektu ASP.NET pokazujący opcję Web Forms

    Rysunek 2Wybierz szablon Web Forms

  7. Kliknij OK

Po przygotowaniu projektu, zainstaluj IronXL, aby zacząć tworzyć pliki Excel programatycznie.


Jak utworzyć skoroszyt Excel w C#?

Utworzenie nowego skoroszytu Excel za pomocą IronXL wymaga tylko jednej linijki kodu:

using IronXL;

// Create workbook with XLSX format (recommended for modern Excel)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

// Alternative: Create legacy XLS format for older Excel versions
WorkBook legacyWorkbook = WorkBook.Create(ExcelFileFormat.XLS);
using IronXL;

// Create workbook with XLSX format (recommended for modern Excel)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

// Alternative: Create legacy XLS format for older Excel versions
WorkBook legacyWorkbook = WorkBook.Create(ExcelFileFormat.XLS);
Imports IronXL

' Create workbook with XLSX format (recommended for modern Excel)
Private workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)

' Alternative: Create legacy XLS format for older Excel versions
Private legacyWorkbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLS)
$vbLabelText   $csharpLabel

Metoda WorkBook.Create obsługuje zarówno formaty XLS (Excel 97-2003), jak i XLSX (Excel 2007+). XLSX jest zalecany dla lepszej wydajności i mniejszych rozmiarów plików.

  • XLSX: Zalecany dla wszystkich nowoczesnych wersji Excel (2007+) — mniejsze pliki, lepsza wydajność
  • XLS: Format starszy dla zgodności z Excel 97–2003

Jak dodać arkusz do skoroszytu?

Dodawanie arkuszy jest proste:

// Create a worksheet with custom name for budget tracking
WorkSheet budgetSheet = workbook.CreateWorkSheet("2020 Budget");

// Add multiple worksheets for different purposes
WorkSheet salesSheet = workbook.CreateWorkSheet("Sales Data");
WorkSheet inventorySheet = workbook.CreateWorkSheet("Inventory");

// Access existing worksheet by name
WorkSheet existingSheet = workbook.GetWorkSheet("2020 Budget");
// Create a worksheet with custom name for budget tracking
WorkSheet budgetSheet = workbook.CreateWorkSheet("2020 Budget");

// Add multiple worksheets for different purposes
WorkSheet salesSheet = workbook.CreateWorkSheet("Sales Data");
WorkSheet inventorySheet = workbook.CreateWorkSheet("Inventory");

// Access existing worksheet by name
WorkSheet existingSheet = workbook.GetWorkSheet("2020 Budget");
' Create a worksheet with custom name for budget tracking
Dim budgetSheet As WorkSheet = workbook.CreateWorkSheet("2020 Budget")

' Add multiple worksheets for different purposes
Dim salesSheet As WorkSheet = workbook.CreateWorkSheet("Sales Data")
Dim inventorySheet As WorkSheet = workbook.CreateWorkSheet("Inventory")

' Access existing worksheet by name
Dim existingSheet As WorkSheet = workbook.GetWorkSheet("2020 Budget")
$vbLabelText   $csharpLabel

Skoroszyt zawiera jeden lub więcej arkuszy. Każdy arkusz składa się z wierszy i kolumn, z komórkami na ich przecięciach. Użyj metody CreateWorkSheet do dodawania nowych arkuszy do swojego skoroszytu.

  • CreateWorkSheet("name"): Dodaje nowy arkusz z podaną nazwą zakładki
  • GetWorkSheet("name"): Pobiera istniejący arkusz według nazwy
  • Nazwy arkuszy muszą być unikalne w ramach skoroszytu

Jak ustawić wartości komórek w Excelu?

Jak mogę ręcznie ustawić wartości komórek?

Ustawianie indywidualnych wartości komórek używa intuicyjnej składni podobnej do Excela:

// Set month names in first row for annual budget spreadsheet
workSheet["A1"].Value = "January";
workSheet["B1"].Value = "February";
workSheet["C1"].Value = "March";
workSheet["D1"].Value = "April";
workSheet["E1"].Value = "May";
workSheet["F1"].Value = "June";
workSheet["G1"].Value = "July";
workSheet["H1"].Value = "August";
workSheet["I1"].Value = "September";
workSheet["J1"].Value = "October";
workSheet["K1"].Value = "November";
workSheet["L1"].Value = "December";

// Set different data types - IronXL handles conversion automatically
workSheet["A2"].Value = 1500.50m;  // Decimal for currency
workSheet["A3"].Value = DateTime.Now;  // Date values
workSheet["A4"].Value = true;  // Boolean values
// Set month names in first row for annual budget spreadsheet
workSheet["A1"].Value = "January";
workSheet["B1"].Value = "February";
workSheet["C1"].Value = "March";
workSheet["D1"].Value = "April";
workSheet["E1"].Value = "May";
workSheet["F1"].Value = "June";
workSheet["G1"].Value = "July";
workSheet["H1"].Value = "August";
workSheet["I1"].Value = "September";
workSheet["J1"].Value = "October";
workSheet["K1"].Value = "November";
workSheet["L1"].Value = "December";

// Set different data types - IronXL handles conversion automatically
workSheet["A2"].Value = 1500.50m;  // Decimal for currency
workSheet["A3"].Value = DateTime.Now;  // Date values
workSheet["A4"].Value = true;  // Boolean values
' Set month names in first row for annual budget spreadsheet
workSheet("A1").Value = "January"
workSheet("B1").Value = "February"
workSheet("C1").Value = "March"
workSheet("D1").Value = "April"
workSheet("E1").Value = "May"
workSheet("F1").Value = "June"
workSheet("G1").Value = "July"
workSheet("H1").Value = "August"
workSheet("I1").Value = "September"
workSheet("J1").Value = "October"
workSheet("K1").Value = "November"
workSheet("L1").Value = "December"

' Set different data types - IronXL handles conversion automatically
workSheet("A2").Value = 1500.50D ' Decimal for currency
workSheet("A3").Value = DateTime.Now ' Date values
workSheet("A4").Value = True ' Boolean values
$vbLabelText   $csharpLabel

Właściwość Cell.Value akceptuje różne typy danych, w tym ciągi, liczby, daty i wartości logiczne. IronXL automatycznie formatuje komórki na podstawie typu danych.

Jak dynamicznie ustawić wartości komórek?

Dynamiczne ustawianie wartości jest idealne dla aplikacji opartych na danych:

// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
' Initialize random number generator for sample data
Dim r As New Random()

' Populate cells with random budget data for each month
For i As Integer = 2 To 11
	' Set different budget categories with increasing ranges
	workSheet($"A{i}").Value = r.Next(1, 1000) ' Office Supplies
	workSheet($"B{i}").Value = r.Next(1000, 2000) ' Utilities
	workSheet($"C{i}").Value = r.Next(2000, 3000) ' Rent
	workSheet($"D{i}").Value = r.Next(3000, 4000) ' Salaries
	workSheet($"E{i}").Value = r.Next(4000, 5000) ' Marketing
	workSheet($"F{i}").Value = r.Next(5000, 6000) ' IT Services
	workSheet($"G{i}").Value = r.Next(6000, 7000) ' Travel
	workSheet($"H{i}").Value = r.Next(7000, 8000) ' Training
	workSheet($"I{i}").Value = r.Next(8000, 9000) ' Insurance
	workSheet($"J{i}").Value = r.Next(9000, 10000) ' Equipment
	workSheet($"K{i}").Value = r.Next(10000, 11000) ' Research
	workSheet($"L{i}").Value = r.Next(11000, 12000) ' Misc
Next i

' Alternative: Set range of cells with same value
workSheet("A13:L13").Value = 0 ' Initialize totals row
$vbLabelText   $csharpLabel

Interpolacja ciągów ($"A{i}") umożliwia łatwe dynamiczne odwoływanie się do komórek. Indeksator Range obsługuje zarówno indywidualne komórki, jak i zakresy.

Jak załadować dane do Excela z bazy danych?

Ładowanie danych z baz danych do Excela jest powszechnym wymaganiem:

using System.Data;
using System.Data.SqlClient;
using IronXL;

// Database connection setup for retrieving sales data
string connectionString = @"Data Source=ServerName;Initial Catalog=SalesDB;Integrated Security=true";
string query = "SELECT ProductName, Quantity, UnitPrice, TotalSales FROM MonthlySales";

// Create DataSet to hold query results
DataSet salesData = new DataSet();

using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection))
{
    // Fill DataSet with sales information
    adapter.Fill(salesData);
}

// Write headers for database columns
workSheet["A1"].Value = "Product Name";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Unit Price";
workSheet["D1"].Value = "Total Sales";

// Apply header formatting
workSheet["A1:D1"].Style.Font.Bold = true;
workSheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
workSheet["A1:D1"].Style.Font.FontColor = "#FFFFFF";

// Populate Excel with database records
DataTable salesTable = salesData.Tables[0];
for (int row = 0; row < salesTable.Rows.Count; row++)
{
    int excelRow = row + 2; // Start from row 2 (after headers)

    workSheet[$"A{excelRow}"].Value = salesTable.Rows[row]["ProductName"].ToString();
    workSheet[$"B{excelRow}"].Value = Convert.ToInt32(salesTable.Rows[row]["Quantity"]);
    workSheet[$"C{excelRow}"].Value = Convert.ToDecimal(salesTable.Rows[row]["UnitPrice"]);
    workSheet[$"D{excelRow}"].Value = Convert.ToDecimal(salesTable.Rows[row]["TotalSales"]);

    // Format currency columns
    workSheet[$"C{excelRow}"].FormatString = "$#,##0.00";
    workSheet[$"D{excelRow}"].FormatString = "$#,##0.00";
}

// Add summary row with formulas
int summaryRow = salesTable.Rows.Count + 2;
workSheet[$"A{summaryRow}"].Value = "TOTAL";
workSheet[$"B{summaryRow}"].Formula = $"=SUM(B2:B{summaryRow-1})";
workSheet[$"D{summaryRow}"].Formula = $"=SUM(D2:D{summaryRow-1})";
using System.Data;
using System.Data.SqlClient;
using IronXL;

// Database connection setup for retrieving sales data
string connectionString = @"Data Source=ServerName;Initial Catalog=SalesDB;Integrated Security=true";
string query = "SELECT ProductName, Quantity, UnitPrice, TotalSales FROM MonthlySales";

// Create DataSet to hold query results
DataSet salesData = new DataSet();

using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection))
{
    // Fill DataSet with sales information
    adapter.Fill(salesData);
}

// Write headers for database columns
workSheet["A1"].Value = "Product Name";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Unit Price";
workSheet["D1"].Value = "Total Sales";

// Apply header formatting
workSheet["A1:D1"].Style.Font.Bold = true;
workSheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
workSheet["A1:D1"].Style.Font.FontColor = "#FFFFFF";

// Populate Excel with database records
DataTable salesTable = salesData.Tables[0];
for (int row = 0; row < salesTable.Rows.Count; row++)
{
    int excelRow = row + 2; // Start from row 2 (after headers)

    workSheet[$"A{excelRow}"].Value = salesTable.Rows[row]["ProductName"].ToString();
    workSheet[$"B{excelRow}"].Value = Convert.ToInt32(salesTable.Rows[row]["Quantity"]);
    workSheet[$"C{excelRow}"].Value = Convert.ToDecimal(salesTable.Rows[row]["UnitPrice"]);
    workSheet[$"D{excelRow}"].Value = Convert.ToDecimal(salesTable.Rows[row]["TotalSales"]);

    // Format currency columns
    workSheet[$"C{excelRow}"].FormatString = "$#,##0.00";
    workSheet[$"D{excelRow}"].FormatString = "$#,##0.00";
}

// Add summary row with formulas
int summaryRow = salesTable.Rows.Count + 2;
workSheet[$"A{summaryRow}"].Value = "TOTAL";
workSheet[$"B{summaryRow}"].Formula = $"=SUM(B2:B{summaryRow-1})";
workSheet[$"D{summaryRow}"].Formula = $"=SUM(D2:D{summaryRow-1})";
Imports System.Data
Imports System.Data.SqlClient
Imports IronXL

' Database connection setup for retrieving sales data
Private connectionString As String = "Data Source=ServerName;Initial Catalog=SalesDB;Integrated Security=true"
Private query As String = "SELECT ProductName, Quantity, UnitPrice, TotalSales FROM MonthlySales"

' Create DataSet to hold query results
Private salesData As New DataSet()

Using connection As New SqlConnection(connectionString)
Using adapter As New SqlDataAdapter(query, connection)
	' Fill DataSet with sales information
	adapter.Fill(salesData)
End Using
End Using

' Write headers for database columns
workSheet("A1").Value = "Product Name"
workSheet("B1").Value = "Quantity"
workSheet("C1").Value = "Unit Price"
workSheet("D1").Value = "Total Sales"

' Apply header formatting
workSheet("A1:D1").Style.Font.Bold = True
workSheet("A1:D1").Style.SetBackgroundColor("#4472C4")
workSheet("A1:D1").Style.Font.FontColor = "#FFFFFF"

' Populate Excel with database records
Dim salesTable As DataTable = salesData.Tables(0)
For row As Integer = 0 To salesTable.Rows.Count - 1
	Dim excelRow As Integer = row + 2 ' Start from row 2 (after headers)

	workSheet($"A{excelRow}").Value = salesTable.Rows(row)("ProductName").ToString()
	workSheet($"B{excelRow}").Value = Convert.ToInt32(salesTable.Rows(row)("Quantity"))
	workSheet($"C{excelRow}").Value = Convert.ToDecimal(salesTable.Rows(row)("UnitPrice"))
	workSheet($"D{excelRow}").Value = Convert.ToDecimal(salesTable.Rows(row)("TotalSales"))

	' Format currency columns
	workSheet($"C{excelRow}").FormatString = "$#,##0.00"
	workSheet($"D{excelRow}").FormatString = "$#,##0.00"
Next row

' Add summary row with formulas
Dim summaryRow As Integer = salesTable.Rows.Count + 2
workSheet($"A{summaryRow}").Value = "TOTAL"
workSheet($"B{summaryRow}").Formula = $"=SUM(B2:B{summaryRow-1})"
workSheet($"D{summaryRow}").Formula = $"=SUM(D2:D{summaryRow-1})"
$vbLabelText   $csharpLabel

Ten przykład demonstruje czytanie danych Excel z baz danych, stosowanie formatowania i używanie formuł do obliczeń. Właściwość FormatString umożliwia niestandardowe formatowanie liczb podobnie jak w Excelu.


Jak stosować formatowanie do komórek Excel?

Jak mogę ustawić kolory tła w Excelu?

Stylizacja komórek zwiększa czytelność i atrakcyjność wizualną:

// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
' Set header row background to light gray using hex color
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")

' Apply different colors for data categorization
workSheet("A2:A11").Style.SetBackgroundColor("#E7F3FF") ' Light blue for January
workSheet("B2:B11").Style.SetBackgroundColor("#FFF2CC") ' Light yellow for February

' Highlight important cells with bold colors
workSheet("L12").Style.SetBackgroundColor("#FF0000") ' Red for totals
workSheet("L12").Style.Font.FontColor = "#FFFFFF" ' White text

' Create alternating row colors for better readability
For row As Integer = 2 To 11
	If row Mod 2 = 0 Then
		workSheet($"A{row}:L{row}").Style.SetBackgroundColor("#F2F2F2")
	End If
Next row
$vbLabelText   $csharpLabel

Metoda Style.SetBackgroundColor akceptuje kody kolorów w formacie szesnastkowym. Połącz kolory tła z kolorami czcionki, aby uzyskać profesjonalnie wyglądające arkusze.

Jak utworzyć obramowania w Excelu?

Obramowania pomagają definiować obszary danych i poprawić strukturę:

using IronXL;
using IronXL.Styles;

// Create header border - thick bottom line to separate from data
workSheet["A1:L1"].Style.TopBorder.SetColor("#000000");
workSheet["A1:L1"].Style.TopBorder.Type = BorderType.Thick;
workSheet["A1:L1"].Style.BottomBorder.SetColor("#000000");
workSheet["A1:L1"].Style.BottomBorder.Type = BorderType.Thick;

// Add right border to last column
workSheet["L2:L11"].Style.RightBorder.SetColor("#000000");
workSheet["L2:L11"].Style.RightBorder.Type = BorderType.Medium;

// Create bottom border for data area
workSheet["A11:L11"].Style.BottomBorder.SetColor("#000000");
workSheet["A11:L11"].Style.BottomBorder.Type = BorderType.Medium;

// Apply complete border around summary section
var summaryRange = workSheet["A12:L12"];
summaryRange.Style.TopBorder.Type = BorderType.Double;
summaryRange.Style.BottomBorder.Type = BorderType.Double;
summaryRange.Style.LeftBorder.Type = BorderType.Thin;
summaryRange.Style.RightBorder.Type = BorderType.Thin;
summaryRange.Style.SetBorderColor("#0070C0"); // Blue borders
using IronXL;
using IronXL.Styles;

// Create header border - thick bottom line to separate from data
workSheet["A1:L1"].Style.TopBorder.SetColor("#000000");
workSheet["A1:L1"].Style.TopBorder.Type = BorderType.Thick;
workSheet["A1:L1"].Style.BottomBorder.SetColor("#000000");
workSheet["A1:L1"].Style.BottomBorder.Type = BorderType.Thick;

// Add right border to last column
workSheet["L2:L11"].Style.RightBorder.SetColor("#000000");
workSheet["L2:L11"].Style.RightBorder.Type = BorderType.Medium;

// Create bottom border for data area
workSheet["A11:L11"].Style.BottomBorder.SetColor("#000000");
workSheet["A11:L11"].Style.BottomBorder.Type = BorderType.Medium;

// Apply complete border around summary section
var summaryRange = workSheet["A12:L12"];
summaryRange.Style.TopBorder.Type = BorderType.Double;
summaryRange.Style.BottomBorder.Type = BorderType.Double;
summaryRange.Style.LeftBorder.Type = BorderType.Thin;
summaryRange.Style.RightBorder.Type = BorderType.Thin;
summaryRange.Style.SetBorderColor("#0070C0"); // Blue borders
Imports IronXL
Imports IronXL.Styles

' Create header border - thick bottom line to separate from data
workSheet("A1:L1").Style.TopBorder.SetColor("#000000")
workSheet("A1:L1").Style.TopBorder.Type = BorderType.Thick
workSheet("A1:L1").Style.BottomBorder.SetColor("#000000")
workSheet("A1:L1").Style.BottomBorder.Type = BorderType.Thick

' Add right border to last column
workSheet("L2:L11").Style.RightBorder.SetColor("#000000")
workSheet("L2:L11").Style.RightBorder.Type = BorderType.Medium

' Create bottom border for data area
workSheet("A11:L11").Style.BottomBorder.SetColor("#000000")
workSheet("A11:L11").Style.BottomBorder.Type = BorderType.Medium

' Apply complete border around summary section
Dim summaryRange = workSheet("A12:L12")
summaryRange.Style.TopBorder.Type = BorderType.Double
summaryRange.Style.BottomBorder.Type = BorderType.Double
summaryRange.Style.LeftBorder.Type = BorderType.Thin
summaryRange.Style.RightBorder.Type = BorderType.Thin
summaryRange.Style.SetBorderColor("#0070C0") ' Blue borders
$vbLabelText   $csharpLabel

IronXL obsługuje różne typy obramowań, w tym cienkie, średnie, grube, podwójne, kropkowane i kreskowane. Każda strona obramowania może być stylizowana niezależnie.


Jak używać formuł Excel w C#?

IronXL zapewnia potężną obsługę formuł z automatycznym obliczaniem:

// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workSheet.EvaluateAll();
// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workSheet.EvaluateAll();
' Use built-in aggregation functions for ranges
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign calculated values to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min

' Or use Excel formulas directly
workSheet("A12").Formula = "=SUM(A2:A11)"
workSheet("B12").Formula = "=AVERAGE(B2:B11)"
workSheet("C12").Formula = "=MAX(C2:C11)"
workSheet("D12").Formula = "=MIN(D2:D11)"

' Complex formulas with multiple functions
workSheet("E12").Formula = "=IF(SUM(E2:E11)>50000,""Over Budget"",""On Track"")"
workSheet("F12").Formula = "=SUMIF(F2:F11,"">5000"")"

' Percentage calculations
workSheet("G12").Formula = "=G11/SUM(G2:G11)*100"
workSheet("G12").FormatString = "0.00%"

' Ensure all formulas calculate
workSheet.EvaluateAll()
$vbLabelText   $csharpLabel

Klasa Range dostarcza metody takie jak Sum(), Avg(), Max() i Min() do szybkich obliczeń. Dla bardziej zaawansowanych scenariuszy, użyj właściwości Formula do ustawiania formuł Excel bezpośrednio.

{t:(Preferuj wbudowane metody IronXL .Sum(), .Avg(), .Max(), i .Min() zamiast surowych ciągów formuł przy pracy z zakresami — są typobezpieczne i unikają błędów składniowych formuły.)}


Jak ustawiam właściwości arkusza roboczego i drukowania?

Użyj IronXL, aby chronić poszczególne arkusze, zamrażać wiersze i kolumny oraz ustawiać opcje formatu wydruku.

Jak mogę skonfigurować właściwości arkusza roboczego?

Chroń arkusze i kontroluj opcje wyświetlania:

// Protect worksheet with password to prevent unauthorized changes
workSheet.ProtectSheet("SecurePassword123");

// Freeze panes to keep headers visible while scrolling
workSheet.CreateFreezePane(0, 1); // Freeze first row
// workSheet.CreateFreezePane(1, 1); // Freeze first row and column

// Set worksheet visibility options
workSheet.ViewState = WorkSheetViewState.Visible; // or Hidden, VeryHidden

// Configure gridlines and headers
workSheet.ShowGridLines = true;
workSheet.ShowRowColHeaders = true;

// Set zoom level for better viewing
workSheet.Zoom = 85; // 85% zoom
// Protect worksheet with password to prevent unauthorized changes
workSheet.ProtectSheet("SecurePassword123");

// Freeze panes to keep headers visible while scrolling
workSheet.CreateFreezePane(0, 1); // Freeze first row
// workSheet.CreateFreezePane(1, 1); // Freeze first row and column

// Set worksheet visibility options
workSheet.ViewState = WorkSheetViewState.Visible; // or Hidden, VeryHidden

// Configure gridlines and headers
workSheet.ShowGridLines = true;
workSheet.ShowRowColHeaders = true;

// Set zoom level for better viewing
workSheet.Zoom = 85; // 85% zoom
' Protect worksheet with password to prevent unauthorized changes
workSheet.ProtectSheet("SecurePassword123")

' Freeze panes to keep headers visible while scrolling
workSheet.CreateFreezePane(0, 1) ' Freeze first row
' workSheet.CreateFreezePane(1, 1); // Freeze first row and column

' Set worksheet visibility options
workSheet.ViewState = WorkSheetViewState.Visible ' or Hidden, VeryHidden

' Configure gridlines and headers
workSheet.ShowGridLines = True
workSheet.ShowRowColHeaders = True

' Set zoom level for better viewing
workSheet.Zoom = 85 ' 85% zoom
$vbLabelText   $csharpLabel

Ochrona arkusza zapobiega przypadkowym modyfikacjom, podczas gdy zamrożenie okien utrzymuje ważne wiersze lub kolumny widoczne podczas przewijania.

Arkusz Excel pokazujący zamrożony wiersz nagłówka z danymi budżetowymi miesięcznymi

Rysunek 7Zamrożony wiersz nagłówka pozostaje widoczny podczas przewijania

Dialog ochrony Excel wymagający hasła do modyfikacji chronionego arkusza

Rysunek 8Ochrona hasłem zapobiega nieautoryzowanym edycjom

Jak skonfigurować ustawienia strony i drukowania?

Skonfiguruj profesjonalne opcje drukowania przez IronXL:

using IronXL.Printing;

// Define print area to exclude empty cells
workSheet.SetPrintArea("A1:L12");

// Configure page orientation for wide data
workSheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape;

// Set paper size for standard printing
workSheet.PrintSetup.PaperSize = PaperSize.A4;

// Adjust margins for better layout (in inches)
workSheet.PrintSetup.LeftMargin = 0.5;
workSheet.PrintSetup.RightMargin = 0.5;
workSheet.PrintSetup.TopMargin = 0.75;
workSheet.PrintSetup.BottomMargin = 0.75;

// Configure header and footer
workSheet.PrintSetup.HeaderMargin = 0.3;
workSheet.PrintSetup.FooterMargin = 0.3;

// Scale to fit on one page
workSheet.PrintSetup.FitToPage = true;
workSheet.PrintSetup.FitToHeight = 1;
workSheet.PrintSetup.FitToWidth = 1;

// Add print headers/footers
workSheet.Header.Center = "Monthly Budget Report";
workSheet.Footer.Left = DateTime.Now.ToShortDateString();
workSheet.Footer.Right = "Page &P of &N"; // Page numbering
using IronXL.Printing;

// Define print area to exclude empty cells
workSheet.SetPrintArea("A1:L12");

// Configure page orientation for wide data
workSheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape;

// Set paper size for standard printing
workSheet.PrintSetup.PaperSize = PaperSize.A4;

// Adjust margins for better layout (in inches)
workSheet.PrintSetup.LeftMargin = 0.5;
workSheet.PrintSetup.RightMargin = 0.5;
workSheet.PrintSetup.TopMargin = 0.75;
workSheet.PrintSetup.BottomMargin = 0.75;

// Configure header and footer
workSheet.PrintSetup.HeaderMargin = 0.3;
workSheet.PrintSetup.FooterMargin = 0.3;

// Scale to fit on one page
workSheet.PrintSetup.FitToPage = true;
workSheet.PrintSetup.FitToHeight = 1;
workSheet.PrintSetup.FitToWidth = 1;

// Add print headers/footers
workSheet.Header.Center = "Monthly Budget Report";
workSheet.Footer.Left = DateTime.Now.ToShortDateString();
workSheet.Footer.Right = "Page &P of &N"; // Page numbering
Imports IronXL.Printing

' Define print area to exclude empty cells
workSheet.SetPrintArea("A1:L12")

' Configure page orientation for wide data
workSheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape

' Set paper size for standard printing
workSheet.PrintSetup.PaperSize = PaperSize.A4

' Adjust margins for better layout (in inches)
workSheet.PrintSetup.LeftMargin = 0.5
workSheet.PrintSetup.RightMargin = 0.5
workSheet.PrintSetup.TopMargin = 0.75
workSheet.PrintSetup.BottomMargin = 0.75

' Configure header and footer
workSheet.PrintSetup.HeaderMargin = 0.3
workSheet.PrintSetup.FooterMargin = 0.3

' Scale to fit on one page
workSheet.PrintSetup.FitToPage = True
workSheet.PrintSetup.FitToHeight = 1
workSheet.PrintSetup.FitToWidth = 1

' Add print headers/footers
workSheet.Header.Center = "Monthly Budget Report"
workSheet.Footer.Left = DateTime.Now.ToShortDateString()
workSheet.Footer.Right = "Page &P of &N" ' Page numbering
$vbLabelText   $csharpLabel

Klasa PrintSetup dostarcza kompleksowe opcje konfiguracji druku odpowiadające ustawieniom wydruku w Excelu.

Podgląd wydruku Excel pokazujący orientację poziomą i ustawienia rozmiaru papieru A4

Rysunek 9Podgląd wydruku z orientacją poziomą i niestandardowymi marginesami


Jak zapisać mój skoroszyt Excel?

Zapisz swój skoroszyt w różnych formatach:

// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
' Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx")

' Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls")

' Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv")

' Save as JSON for web applications
workBook.SaveAsJson("Budget.json")

' Save to stream for web downloads or cloud storage
Using stream = New MemoryStream()
	workBook.SaveAs(stream)
	Dim excelData() As Byte = stream.ToArray()
	' Send to client or save to cloud
End Using

' Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8)
$vbLabelText   $csharpLabel

IronXL obsługuje wiele formatów eksportu, w tym XLSX, XLS, CSV, TSV i JSON. Metoda SaveAs automatycznie określa format na podstawie rozszerzenia pliku.

  • XLSX / XLS: Pełny format Excel z formatowaniem, formułami i wieloma arkuszami
  • CSV: Czysty tekst do wymiany danych — eksportuje jeden arkusz na plik
  • JSON: Strukturalne dane wyjściowe dla API webowych i linii danych
  • Stream: Do wyjścia w pamięci — przydatne dla pobrań z sieci lub przechowywania w chmurze

Podsumowanie

Ten tutorial demonstrował, jak tworzyć pliki Excel w C# bez zależności Microsoft Office używając IronXL. Poznałeś istotne operacje Excel, w tym tworzenie skoroszytu, manipulację komórkami, formatowanie, użycie formuł i różne opcje zapisu. Intuicyjne API IronXL sprawia, że automatyzacja Excela jest prosta dla deweloperów .NET.

Dla bardziej zaawansowanych funkcji, odkryj scalanie komórek, oraz tworzenie wykresów. Gotowy do używania IronXL w produkcji? Rozpocznij darmowy okres próbny lub zobacz opcje licencjonowania.

Co dalej?

Skoro możesz tworzyć pliki Excel w C#, odkryj te powiązane funkcje IronXL:


Szybki dostęp do samouczka

Logo Visual Studio

Pobierz ten tutorial jako kod źródłowy C#

Kompletny kod źródłowy C# do tworzenia plików Excel jest dostępny jako plik projektu Visual Studio.

Pobierz

Zapoznaj się z tym samouczkiem na GitHubie

Kod źródłowy tego projektu jest dostępny w C# i VB.NET na GitHub.

Użyj tego kodu jako łatwego sposobu na rozpoczęcie tworzenia plików Excel w zaledwie kilka minut. Projekt jest zapisany jako projekt Microsoft Visual Studio, ale jest kompatybilny z dowolnym IDE .NET.

Tworzenie plików Excel w C# na GitHub
Logo GitHub
Ikona dokumentacji API

Przeczytaj dokumentację API IronXL

Odkryj dokumentację API dla IronXL, opisującą wszystkie funkcje, przestrzenie nazw, klasy, metody i właściwości dla kompleksowej manipulacji Excel w .NET.

Zobacz Dokumentację API

Często Zadawane Pytania

How can I create Excel files in C# without using Interop?

You can create Excel files without Interop using IronXL, which provides a simple API: WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX). This approach works on any .NET platform without requiring Microsoft Office installation.

What platforms does Excel file creation with C# support?

IronXL supports Excel file creation on .NET 10, .NET 9, .NET 8, .NET Core, .NET Framework 4.6.2+, running on Windows, macOS, Linux, Docker, Azure, and AWS environments.

How do I install a C# library for Excel generation?

Install IronXL via NuGet Package Manager in Visual Studio, use the command PM> Install-Package IronXl.Excel, or download directly from nuget.org.

How do I create a new Excel workbook programmatically?

Create a workbook using IronXL with WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX), then add worksheets using workbook.CreateWorkSheet("SheetName").

How can I set cell values in an Excel worksheet using C#?

Set cell values in IronXL using intuitive syntax: worksheet["A1"].Value = "Hello World" or set ranges: worksheet["A1:A10"].Value = 100.

Can I apply formatting to Excel cells programmatically?

Yes, IronXL supports comprehensive formatting including background colors (cell.Style.SetBackgroundColor("#FF0000")), borders, fonts, and number formats.

How do I use Excel formulas in C#?

Apply formulas using IronXL's Formula property: worksheet["A1"].Formula = "=SUM(B1:B10)", or use built-in methods like range.Sum(), range.Avg().

How can I protect an Excel worksheet with a password?

Protect worksheets in IronXL using worksheet.ProtectSheet("YourPassword") to prevent unauthorized modifications.

How do I configure print settings for Excel files?

Set print properties using IronXL's PrintSetup: worksheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape and worksheet.SetPrintArea("A1:Z100").

How do I save an Excel workbook in different formats?

Save workbooks using IronXL's SaveAs method: workbook.SaveAs("file.xlsx") for XLSX, or use SaveAsCsv(), SaveAsJson() for other formats.

How do I populate an Excel sheet with data from a database?

Use IronXL to populate worksheets by fetching data from a database and setting it in cells using methods like worksheet["A1"].Value = dataFromDatabase.

How can I implement freeze panes in an Excel sheet using C#?

Freeze panes in worksheets using IronXL with worksheet.FreezePanes(1, 1) to lock the top row and leftmost column for easier navigation.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 1,950,735 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronXl.Excel
uruchom próbkę zobacz, jak Twoje dane stają się arkuszem.