Przejdź do treści stopki
Iron Academy Logo
Naucz się C#
Naucz się C#

Inne Kategorie

Tworzenie plików Excel w języku C#

Tim Corey
55m 42s

Tworzenie i zarządzanie plikami Excel to kluczowa umiejętność dla każdego programisty C# tworzącego narzędzia do raportowania, eksportu danych czy interfejsów do wprowadzania danych przez użytkownika. W tym artykułe szczegółowo omawiamy przewodnik przedstawiony przez Tima Coreya w jego filmie "Creating Excel files in C#", gdzie pokazuje on, jak utworzyć plik Excel przy użyciu C#, sformatować go, a nawet odczytać z niego dane — wszystko z wykorzystaniem biblioteki EPPlus.

Niezależnie od tego, czy chcesz utworzyć nowy skoroszyt Excel z List, formatować komórki arkusza Excel, czy odczytywać strukturalne dane z powrotem do swojej aplikacji, przykład Tima służy jako praktyczny przewodnik po podstawach generowania plików Excel w C#.

Rozbijmy to krok po kroku, odwołując się do filmu Tima.

Wprowadzenie: Dłączego używać Excel w C#?

Tim zaczyna od wyjaśnienia, że Microsoft Excel jest jednym z najważniejszych narzędzi w biznesie. Pliki Excel są przyjazne dla użytkownika, wysoce wszechstronne i idealne do prezentacji danych. Podkreśla, że tworzenie plików Excel w C# może być używane jako zamiennik dla skomplikówanych rozwiązań raportowania — czyniąc Excel domyślnym narzędziem raportującym.

Cel: stworzyć aplikację Excel używając C#, wypełnić ją danymi, zastosować formatowanie, a następnie odczytać dane z tego pliku Excel.

Konfiguracja projektu w Solution Explorer

Tim otwiera Visual Studio 2019, wybiera aplikację konsolową (.NET Core) i nazywa rozwiązanie ExcelDemoApp. Używanie aplikacji konsolowej zapewnia czyste i wolne od rozproszeń środowisko do skupienia się wyłącznie na kodzie związanym z Excel.

Aktualizuje środowisko docelowe do .NET 5.0, aby wykorzystać funkcje C# 9, takie jak uproszczona inicjalizacja obiektów.

Dodawanie EPPlus z paczek NuGet

Aby utworzyć skoroszyt Excel, Tim instaluje pakiet EPPlus za pośrednictwem Menedżera pakietów NuGet. EPPlus to biblioteka Excel, która współpracuje z plikami .xlsx (Open XML) i obsługuje pełną funkcjonalność Excel, taką jak wykresy, tabele, style i formuły — bez potrzeby instalowania MS Office lub Excel Interop.

Uwaga: EPPlus jest darmowy do użytku niekomercyjnego, ale wymaga licencji do zastosowań komercyjnych.

Kopiuje wymagańą linię akceptacji licencji niekomercyjnej do swojego kodu, aby uniknąć błędów wykonania, i dodaje niezbędną dyrektywę using OfficeOpenXml; dyrektywę.

Definiowanie ścieżki pliku Excel

Używając System.IO.FileInfo, Tim ustala zakodowaną na stałe ścieżkę pliku:

var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");

Ten plik nie istnieje początkowo — zostanie stworzony dynamicznie przez program.

Tworzenie modelu danych

Aby wypełnić arkusz Excel, Tim definiuje prostą klasę PersonModel z następującymi właściwościami:

  • int Id

  • string FirstName

  • string LastName

Używa metody pomocniczej GetSetupData(), aby zwrócić List wypełnioną przykładowymi danymi, takimi jak Tim Corey, Sue Storm i Jane Smith.

Asynchroniczne zapisywanie danych do pliku Excel

We współczesnym programowaniu blokowanie wątku UI jest niedopuszczalne. Dlatego Tim definiuje metodę asynchroniczną:

static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)

Przed zapisem do Excel sprawdza, czy plik istnieje i usuwa go, aby uniknąć konfliktów nazw.

if (file.Exists) file.Delete();
if (file.Exists) file.Delete();

Tworzenie i formatowanie arkusza Excel

Tim używa obiektu EPPlus ExcelPackage w bloku using, aby zapewnić właściwe zwolnienie zasobów:

using var package = new ExcelPackage(file);
using var package = new ExcelPackage(file);

Dodaje nowy arkusz do skoroszytu:

var ws = package.Workbook.Worksheets.Add("MainReport");
var ws = package.Workbook.Worksheets.Add("MainReport");

Ładowanie danych

Używając LoadFromCollection, wstawia listę osób od komórki "A2":

ws.Cells["A2"].LoadFromCollection(people, true);
ws.Cells["A2"].LoadFromCollection(people, true);
  • true gwarantuje, że nagłówki są uwzględnione (na przykład "Id", "FirstName", "LastName").

Następnie AutoFitColumns() automatycznie dostosowuje szerokości kolumn:

ws.Cells[ws.Dimension.Address].AutoFitColumns();
ws.Cells[ws.Dimension.Address].AutoFitColumns();

W końcu zapisuje plik Excel:

await package.SaveAsync();
await package.SaveAsync();

Formatowanie komórek i wierszy w Excel

Aby plik Excel był bardziej czytelny, Tim pokazuje, jak zastosować style:

Wiersz tytułu

ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

Wiersz nagłówka

ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

Niestandardowa szerokość kolumn

ws.Column(3).Width = 20;
ws.Column(3).Width = 20;

Ta sekcja demonstruje zaawansowane formatowanie, takie jak:

  • Scałanie komórek

  • Stylizowanie czcionki

  • Kolory tła

  • Wyrównanie wierszy/kolumn

  • Dostosowania szerokości

Te funkcje naśladują typicalne funkcje formatowania MS Office Excel.

Odczyt danych z pliku Excel w C

Teraz, gdy zapisaliśmy dane do Excel, czas je odczytać z powrotem do C#.

Tim przedstawia metodę:

static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)

Ustawia liczniki wierszy i kolumn:

int row = 3; // Skip title and header rows int col = 1;
int row = 3; // Skip title and header rows int col = 1;

Pętla przez wiersze

Używając pętli while, sprawdza niepuste komórki i odczytuje wartości:

while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))

W pętli wartości są odczytywane i parsowane:

p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();
p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();

Lista<List> jest wypełniana i zwracana.

Weryfikacja zaimportowanych danych

Tim przechodzi przez zwróconą listę i zapisuje każdy wpis na konsolę:

foreach (var p in peopleFromExcel)
{
     Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}
foreach (var p in peopleFromExcel)
{
     Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}

Aby zademonstrować elastyczność Excel jako narzędzia wejściowego dla użytkownika, Tim ręcznie dodaje nowe rekordy ("Bill Smith", "Mary White") bezpośrednio w pliku Excel. Po ponownym uruchomieniu aplikacji, wpisy te są importowane bez zmiany kodu — potwierdzając potencjał Excel jako interfejsu wprowadzania danych.

Praktyczne przypadki użycia

Tim podkreśla przypadki użycia rozwiązania Excel w C#:

  • Eksportowanie tabel bazy danych do Excel

  • Importowanie danych wprowadzonych przez użytkowników końcowych

  • Użycie Excel jako dashboardu raportującego

  • Tworzenie strukturalnych skoroszytów do przetwarzania danych

I wszystko to bez polegania na Microsoft.Office.Interop.Excel, który wymaga zainstalowanego Excel.

Ostatnie uwagi na temat EPPlus i plików Excel

Tim wyjaśnia, że pliki .xlsx utworzone programatycznie nie zawierają pełnych metadanych, dopóki nie zostaną otwarte i zapisane w Excel. Dlatego rozmiar pliku rośnie po jego otwarciu w prawdziwej aplikacji Excel.

Zauważa również, że EPPlus to dopracowana, solidna biblioteka z obsługą dla:

  • Wykresów

  • Obrazów

  • Mikrowykresów

  • Formuł

  • Ustawień stron

  • Obramowań

  • Formatowania komórek

Wnioski

Tworzenie plików Excel w C# nie musi być trudne ani kosztowne. Dzięki bibliotece Excel EPPlus, programiści mogą tworzyć dokumenty Excel pełne funkcji programatycznie bez potrzeby korzystania z MS Office. Jak pokazuje Tim Corey, zaledwie kilkoma liniami kodu możesz:

  • Stworzyć plik Excel

  • Wypełniać wiersze i kolumny

  • Zastosować stylizowanie

  • Odczytywać dane z powrotem

  • Zastosować Excel jako interfejs użytkownika

Czyni to fantastycznym wyborem dla lekkich narzędzi raportujących, importu/eksportu danych lub po prostu dostarczenia użytkownikom znanego im interfejsu.

Więc następnym razem, gdy tworzysz projekt i musisz wyprowadzić lub zużywać dane Excel, spróbuj wdrożyć przykładowy kod z filmu Tima Coreya film — i wprowadź siłę Excel do swoich aplikacji .NET Framework lub .NET Core.

Hero Worlddot related to Tworzenie plików Excel w języku C#
Hero Affiliate related to Tworzenie plików Excel w języku C#

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

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