Tworzenie plików Excel w języku C#
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
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
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.
