Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

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, sformatować komórki arkusza Excel, czy też odczytać strukturalne dane z powrotem do swojej aplikacji, przykład Tima służy jako praktyczny poradnik dotyczący podstaw generowania plików Excel w C#.
Rozbijmy to krok po kroku, odwołując się do filmu Tima.
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 skomplikowanych 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.
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.
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 wymaganą linię akceptacji licencji niekomercyjnej do swojego kodu, aby uniknąć błędów wykonania, i dodaje niezbędną dyrektywę using OfficeOpenXml; dyrektywę.
Używając System.IO.FileInfo, Tim ustala zakodowaną na stałe ścieżkę pliku:
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");Dim file As New FileInfo("C:\demos\youtubedemo.xlsx")Ten plik nie istnieje początkowo — zostanie stworzony dynamicznie przez program.
Aby wypełnić arkusz Excel, Tim definiuje prostą klasę PersonModel z następującymi właściwościami:
int Id
string Imie
string Nazwisko
Używa metody pomocniczej GetSetupData(), aby zwrócić List<PersonModel> wypełnioną przykładowymi danymi, takimi jak Tim Corey, Sue Storm i Jane Smith.
We współczesnym programowaniu blokowanie wątku UI jest niedopuszczalne. Dlatego Tim definiuje metodę asynchroniczną:
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)Private Shared Async Function SaveExcelFile(people As List(Of PersonModel), file As FileInfo) As TaskPrzed zapisem do Excel sprawdza, czy plik istnieje i usuwa go, aby uniknąć konfliktów nazw.
if (file.Exists) file.Delete();If file.Exists Then file.Delete()Tim używa obiektu EPPlus ExcelPackage w bloku using, aby zapewnić właściwe zwolnienie zasobów:
using var package = new ExcelPackage(file);Using package As New ExcelPackage(file)
End UsingDodaje nowy arkusz do skoroszytu:
var ws = package.Workbook.Worksheets.Add("MainReport");Dim ws = package.Workbook.Worksheets.Add("MainReport")Używając LoadFromCollection, wstawia listę osób od komórki "A2":
ws.Cells["A2"].LoadFromCollection(people, true);ws.Cells("A2").LoadFromCollection(people, True)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()Aby plik Excel był bardziej czytelny, Tim pokazuje, jak zastosować style:
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.Centerws.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.Centerws.Column(3).Width = 20;ws.Column(3).Width = 20Ta 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.
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)Private Shared Async Function LoadExcelFile(file As FileInfo) As Task(Of List(Of PersonModel))Ustawia liczniki wierszy i kolumn:
int row = 3; // Skip title and header rows int col = 1;Dim row As Integer = 3 ' Skip title and header rows
Dim col As Integer = 1Używając pętli while, sprawdza niepuste komórki i odczytuje wartości:
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))While Not 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 = Integer.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<PersonModel>> jest wypełniana i zwracana.
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}");
}For Each p In peopleFromExcel
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}")
NextAby 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.
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.
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
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.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy