Jak utworzyć plik Excel w 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, aplikówanie 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 dłączego używać go do tworzenia plików Excel?

IronXL to intuicyjne API Excela dla C# i VB, które pozwala czytać, edytować i tworzyć pliki 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 z $999

Jak szybko utworzyć i zapisać plik Excel?

Zainstaluj IronXL przez NuGet lub pobierz DLL bezpośrednio. Klasa WorkBook stanowi punkt wyjścia dla wszystkich operacji w programie Excel, natomiast klasa WorkSheet udostępnia metody do manipulowania poszczególnymi arkuszami — pełny przewodnik krok po kroku rozpoczyna się w kroku 1 poniżej.


How Do I Install the IronXL C# Library?

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 projektu Visual Studio z opcją Zarządzaj pakietami NuGet
Rysunek 3 - Dostęp do Menedżera Pakietów NuGet przez menu Projektu

Menu kontekstowe Eksploratora rozwiązań wyświetlające opcję Zarządzaj pakietami NuGet
Rysunek 4 - Menu kontekstowe po kliknięciu prawym przyciskiem myszy 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 5 - Instalacja IronXl.Excel przez Menedżera Pakietów NuGet

Alternatywnie można pobrać bibliotekę IronXL DLL bezpośrednio i dodać ją jako odwołanie do projektu poprzez Solution Explorer > References > Browse for IronXL.dll.

Strona pobierania na witrynie IronXL zawierająca instrukcje instalacji i przycisk pobierania
Rysunek 6 - Pobierz biblioteki IronXL z oficjalnej strony internetowej

{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 1Create new ASP.NET project

  5. Kliknij OK
  6. Wybierz szablon Web Forms

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

    Rysunek 2Select Web Forms template

  7. Kliknij OK

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


How Do I Create an Excel Workbook in 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 Create obsługuje zarówno format 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, aby dodać nowe arkusze do skoroszytu.

  • WorkBook.CreateWorkSheet(String): Dodaje nowy arkusz o podanej nazwie karty
  • WorkSheet: 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ść Value akceptuje różne typy danych, w tym ciągi znaków, 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 znaków ($"...") ułatwia dynamiczne odwoływanie się do komórek. Indeksator Item obsługuje zarówno pojedyncze 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ść NumberFormat umożliwia niestandardowe formatowanie liczb, podobnie jak w programie Excel.


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 SetBackgroundColor akceptuje szesnastkowe kody kolorów. 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.


How Do I Use Excel Formulas in 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 udostępnia metody takie jak Sum, Average, Max i Min do szybkich obliczeń. W bardziej złożonych scenariuszach należy użyć właściwości Formula, aby bezpośrednio ustawić formuły programu Excel.

{t:(Preferowane są wbudowane w IronXL metody .Sum(), .Avg(), .Max() i .Min() zamiast surowych ciągów formuł podczas pracy z zakresami — są one bezpieczne pod względem typów i pozwalają uniknąć błędów składniowych formuł.)}


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.

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

Okno dialogowe ochrony programu Excel wymagające podania hasła w celu modyfikacji chronionego arkusza
Rysunek 8 - Ochrona 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 IPrintSetup zapewnia kompleksowe opcje konfiguracji drukowania zgodne z ustawieniami drukowania programu Excel.

Podgląd wydruku w programie Excel z ustawieniami orientacji poziomej i rozmiaru papieru A4
Rysunek 9 - Podglą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 Save 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, eksploruj scalanie komórek i 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:

WorkBook``WorkSheet``WorkBook.Create``CreateWorkSheet``CreateWorkSheet("name")``GetWorkSheet("name")``Cell.Value``$"A{i}"``Range``FormatString``Style.SetBackgroundColor``Range``Sum()``Avg()``Max()``Min()``Formula``PrintSetup``SaveAs

Często Zadawane Pytania

Jak mogę tworzyć pliki Excel w C# bez użycia Interop?

Możesz tworzyć pliki Excel bez Interop używając IronXL, który oferuje prosty API: WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX). To podejście działa na każdej platformie .NET bez potrzeby instalacji Microsoft Office.

Jakie platformy wspierają tworzenie plików Excel za pomocą C#?

IronXL wspiera tworzenie plików Excel na .NET 10, .NET 9, .NET 8, .NET Core, .NET Framework 4.6.2+, działających na Windows, macOS, Linux, Docker, Azure i w środowiskach AWS.

Jak zainstalować bibliotekę C# do generowania Excel?

Zainstaluj IronXL przez Menedżera pakietów NuGet w Visual Studio, użyj polecenia PM> Install-Package IronXL.Excel, lub pobierz bezpośrednio z nuget.org.

Jak programowo utworzyć nowy skoroszyt Excel?

Utwórz skoroszyt używając IronXL z WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX), następnie dodaj arkusze używając workbook.CreateWorkSheet("SheetName").

Jak mogę ustawić wartości komórek w arkuszu Excel używając C#?

Ustaw wartości komórek w IronXL używając intuicyjnej składni: worksheet["A1"].Value = "Hello World" lub ustawiaj zakresy: worksheet["A1:A10"].Value = 100.

Czy mogę programowo stosować formatowanie do komórek Excela?

Tak, IronXL wspiera kompleksowe formatowanie w tym kolory tła (cell.Style.SetBackgroundColor("#FF0000")), obramowania, czcionki i formaty liczbowe.

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

Stosuj formuły używając właściwości Formula IronXL: worksheet["A1"].Formula = "=SUM(B1:B10)", lub używaj wbudowanych metod jak range.Sum(), range.Avg().

Jak mogę zabezpieczyć arkusz Excel hasłem?

Zabezpieczaj arkusze w IronXL używając worksheet.ProtectSheet("YourPassword") aby zapobiec nieautoryzowanym modyfikacjom.

Jak skonfigurować ustawienia drukowania dla plików Excel?

Ustaw właściwości drukowania używając PrintSetup IronXL: worksheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape i worksheet.SetPrintArea("A1:Z100").

Jak zapisać skoroszyt Excel w różnych formatach?

Zapisuj skoroszyty używając metody SaveAs IronXL: workbook.SaveAs("file.xlsx") dla XLSX, lub używaj SaveAsCsv(), SaveAsJson() dla innych formatów.

Jak wypełnić arkusz Excel danymi z bazy danych?

Użyj IronXL do wypełnienia arkuszy przez pobieranie danych z bazy danych i ustawienie ich w komórkach używając metod jak worksheet["A1"].Value = dataFromDatabase.

Jak mogę zaimplementować zamrażanie okienek w arkuszu Excel używając C#?

Zamrażaj okienka w arkuszach używając IronXL z worksheet.FreezePanes(1, 1) aby zablokować najwyższy wiersz i lewą kolumnę dla łatwiejszej nawigacji.

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 2,052,917 | Wersja: 2026.6 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.