C# Odczytuj i zapisuj pliki CSV: Tworzenie, eksportowanie i konwersja plików CSV z IronXL
Pliki CSV — wartości rozdzielone przecinkami przechowywane w formacie zwykłego tekstu — pozostają jednym z najbardziej uniwersalnych formatów wymiany danych między aplikacjami, bazami danych i systemami raportowania. Niezależnie od tego, czy chodzi o eksportowanie listy użytkowników, generowanie raportów finansowych, czy przygotowywanie danych do importu do platform analitycznych, możliwość programowego tworzenia i odczytywania plików CSV przy użyciu języka C# jest niezbędna we współczesnym programowaniu w środowisku .NET. Programiści często rozpoczynają generowanie plików CSV od prostego podejścia var line z wykorzystaniem StringBuilder lub StreamWriter, jednak te ręczne metody szybko stają się podatne na błędy wraz ze wzrostem złożoności danych.
Niektórzy programiści korzystają z bibliotek CSV Helper do podstawowych operacji odczytu/zapisu, ale narzędzia te nadal wymagają ręcznego mapowania i obsługi na poziomie wierszy w porównaniu z podejściami opartymi na arkuszach kalkulacyjnych, takimi jak biblioteka IronXL. W niniejszym przewodniku pokazano, jak zapisywać dane do plików CSV, konwertować istniejące skoroszyty programu Excel do formatu CSV oraz eksportować obiekty do plików z wartościami rozdzielonymi przecinkami przy użyciu biblioteki IronXL — potężnej biblioteki .NET, która upraszcza operacje na arkuszach kalkulacyjnych bez konieczności instalowania programu Microsoft Excel. IronXL działa w systemach Windows, macOS, Linux oraz w środowiskach kontenerowych, takich jak Docker i Azure, dzięki czemu idealnie nadaje się do aplikacji natywnych dla chmury i architektur mikrousług.
Czym jest format CSV i dłączego ma znaczenie?
Plik CSV (Comma Separated Values) jest jednym z najczęściej używanych formatów do przechowywania i wymiany danych tabelarycznych między różnymi aplikacjami. W najprostszej postaci plik CSV to plik tekstowy, w którym każdy wiersz zawiera serię wartości oddzielonych przecinkami. Ta prosta struktura sprawia, że dane CSV są łatwe do generowania, odczytu i przetwarzania w szerokiej gamie systemów oprogramowania.
Format CSV jest zarówno lekki, jak i czytelny dla człowieka, dlatego jest popularnym wyborem do eksportowania raportów, przesyłania danych między bazami danych oraz integracji z narzędziami analitycznymi. Każdy wiersz w pliku CSV reprezentuje pojedynczy rekord, a każda wartość w tym wierszu jest oddzielona przecinkiem. Pierwsza linia pliku służy zazwyczaj jako nagłówek, zawierający nazwy poszczególnych kolumn. Każda kolejna linia zawiera rzeczywiste dane, a każda wartość odpowiada kolumnie w nagłówku.
Zrozumienie struktury plików CSV pomaga w podejmowaniu lepszych decyzji dotyczących wyboru separatora, escapingu znaków i kodowania — wszystkich czynników, które mają wpływ na to, czy systemy niższego szczebla będą w stanie niezawodnie przetworzyć dane wyjściowe. Format pliku CSV jest zdefiniowany w RFC 4180, który zawiera wytyczne dotyczące obsługi skrajnych przypadków, takich jak wbudowane przecinki, znaki nowej linii w polach oraz wartości ciągów znaków w cudzysłowie.
Jak zainstalować IronXL w projekcie .NET?
Dodanie IronXL do nowego projektu zajmuje zaledwie kilka sekund za pośrednictwem NuGet, menedżera pakietów firmy Microsoft dla platformy .NET. Otwórz program Visual Studio, a następnie przejdź do konsoli NuGet Package Manager Console i uruchom następujące polecenie:
Install-Package IronXl.Excel

Alternatywnie, kliknij prawym przyciskiem myszy swój projekt w Eksploratorze rozwiązań, wybierz "Zarządzaj pakietami NuGet", wyszukaj "IronXL" w zakładce Przeglądaj i kliknij Zainstaluj. IronXL obsługuje .NET Framework 4.6.2+, .NET Core, .NET 5/6/7/8/10 i działa na dowolnej platformie bez zewnętrznych zależności lub wymagań dotyczących interoperacyjności COM.
Po zainstalowaniu dodaj przestrzeń nazw IronXL do pliku kodu za pomocą instrukcji using:
using IronXL;
using IronXL;
Imports IronXL
Ta pojedyncza przestrzeń nazw zapewnia dostęp do wszystkich klas potrzebnych do tworzenia arkuszy kalkulacyjnych i operacji eksportu do formatu CSV. W przeciwieństwie do metod opartych na StreamWriter lub StringBuilder służących do ręcznego pisania plików CSV, IronXL automatycznie radzi sobie ze wszystkimi złożonymi aspektami prawidłowego formatowania CSV — w tym z escapowaniem znaków specjalnych, zachowaniem typów danych i oceną formuł przed eksportem.
Dokumentacja IronXL obejmuje pełen zakres API, w tym zaawansowane funkcje, takie jak stylizacja komórek, obliczanie formuł, ochrona hasłem i generowanie wykresów. Dla szybkiego odniesienia biblioteka przykładów IronXL zawiera gotowe do uruchomienia fragmenty kodu obejmujące dziesiątki typowych scenariuszy związanych z arkuszami kalkulacyjnymi.
Jakie platformy obsługuje IronXL?
IronXL działa na każdej platformie obsługującej .NET. Obejmuje to środowiska desktopowe i serwerowe Windows, maszyny programistyczne z systemem macOS oraz serwery Linux, w tym kontenery Docker. Dla zespołów tworzących aplikacje natywne dla chmury na platformach Azure lub AWS, IronXL działa bez konieczności dodatkowej konfiguracji. Biblioteka nie wymaga interoperacyjności COM, instalacji pakietu Microsoft Office ani żadnych zewnętrznych zależności systemówych, co sprawia, że jej wdrażanie i aktualizacja za pomocą standardowych procesów zarządzania pakietami są bardzo proste.
Jak utworzyć nowy plik CSV od podstaw?
Programowe utworzenie nowego pliku CSV obejmuje trzy etapy: utworzenie skoroszytu, wypełnienie go danymi oraz zapisanie w formacie CSV. API IronXL odzwierciedla znany model obiektowy programu Excel, ułatwiając programistom pisanie kodu wykorzystującego koncepcje arkuszy kalkulacyjnych w aplikacjach konsolowych lub dowolnych projektach typu .NET.
Rozważmy scenariusz, w którym trzeba wyeksportować listę rekordów pracowników do pliku CSV. Oto kompletny przykład wykorzystujący instrukcje najwyższego poziomu:
using IronXL;
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Employees");
// Add header row with column names
sheet["A1"].Value = "EmployeeID";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Department";
sheet["D1"].Value = "Salary";
// Add employee data rows
sheet["A2"].Value = 1001;
sheet["B2"].Value = "Sarah Johnson";
sheet["C2"].Value = "Engineering";
sheet["D2"].Value = 85000;
sheet["A3"].Value = 1002;
sheet["B3"].Value = "Michael Chen";
sheet["C3"].Value = "Marketing";
sheet["D3"].Value = 72000;
sheet["A4"].Value = 1003;
sheet["B4"].Value = "Emily Rodriguez";
sheet["C4"].Value = "Finance";
sheet["D4"].Value = 91000;
// Save as CSV file
workBook.SaveAsCsv("employees.csv", ",");
using IronXL;
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Employees");
// Add header row with column names
sheet["A1"].Value = "EmployeeID";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Department";
sheet["D1"].Value = "Salary";
// Add employee data rows
sheet["A2"].Value = 1001;
sheet["B2"].Value = "Sarah Johnson";
sheet["C2"].Value = "Engineering";
sheet["D2"].Value = 85000;
sheet["A3"].Value = 1002;
sheet["B3"].Value = "Michael Chen";
sheet["C3"].Value = "Marketing";
sheet["D3"].Value = 72000;
sheet["A4"].Value = 1003;
sheet["B4"].Value = "Emily Rodriguez";
sheet["C4"].Value = "Finance";
sheet["D4"].Value = 91000;
// Save as CSV file
workBook.SaveAsCsv("employees.csv", ",");
Imports IronXL
' Create a new workbook and worksheet
Dim workBook As WorkBook = WorkBook.Create()
Dim sheet As WorkSheet = workBook.CreateWorkSheet("Employees")
' Add header row with column names
sheet("A1").Value = "EmployeeID"
sheet("B1").Value = "Name"
sheet("C1").Value = "Department"
sheet("D1").Value = "Salary"
' Add employee data rows
sheet("A2").Value = 1001
sheet("B2").Value = "Sarah Johnson"
sheet("C2").Value = "Engineering"
sheet("D2").Value = 85000
sheet("A3").Value = 1002
sheet("B3").Value = "Michael Chen"
sheet("C3").Value = "Marketing"
sheet("D3").Value = 72000
sheet("A4").Value = 1003
sheet("B4").Value = "Emily Rodriguez"
sheet("C4").Value = "Finance"
sheet("D4").Value = 91000
' Save as CSV file
workBook.SaveAsCsv("employees.csv", ",")
Metoda WorkBook.Create() inicjuje nowy arkusz kalkulacyjny całkowicie w pamięci, nie wymagając żadnych plików tymczasowych ani operacji wejścia/wyjścia na dysk aż do ostatecznego zapisania. Metoda CreateWorkSheet() dodaje arkusz o określonej nazwie do skoroszytu — nazwa ta ma znaczenie podczas eksportowania skoroszytów zawierających wiele arkuszy do formatu CSV.
Wynik

Odwołania do komórek, takie jak sheet["A1"], zapewniają bezpośredni dostęp do konkretnych komórek, w których można przypisywać wartości. IronXL akceptuje różne typy danych, w tym ciągi znaków, liczby całkowite, ułamki dziesiętne, daty i wartości logiczne, automatycznie obsługując odpowiedni format dla każdego typu. W przypadku bardziej złożonych scenariuszy wprowadzania danych zapoznaj się z przewodnikiem po operacjach zakresu IronXL, aby poznać techniki zbiorczego przypisywania komórek.
Metoda SaveAsCsv() eksportuje zawartość arkusza do pliku. Pierwszy parametr określa nazwę i ścieżkę pliku wyjściowego, a drugi parametr definiuje znak separatora. IronXL automatycznie zajmuje się prawidłowym formatowaniem, w tym escapowaniem znaków specjalnych, które w przeciwnym razie mogłyby zakłócić parsowanie plików CSV, oraz zachowaniem integralności danych podczas całego procesu eksportu.
Jak wyeksportować listę obiektów do pliku CSV?
Podczas pracy z obiektami silnie typowanymi można użyć pętli foreach do iteracji przez kolekcję i zapisania każdego elementu w arkuszu. Oto przykład wykorzystujący klasę Student z publicznymi właściwościami typu string:
using IronXL;
// Define the Student class with public string properties
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
// Create sample data
var students = new List<Student>
{
new Student { FirstName = "John", LastName = "Smith", Email = "john@example.com" },
new Student { FirstName = "Jane", LastName = "Doe", Email = "jane@example.com" }
};
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.DefaultWorkSheet;
// Add header row
sheet["A1"].Value = "FirstName";
sheet["B1"].Value = "LastName";
sheet["C1"].Value = "Email";
// Use foreach to iterate through the list and write each item
int row = 2;
foreach (var item in students)
{
sheet[$"A{row}"].Value = item.FirstName;
sheet[$"B{row}"].Value = item.LastName;
sheet[$"C{row}"].Value = item.Email;
row++;
}
workBook.SaveAsCsv("students.csv", ",");
using IronXL;
// Define the Student class with public string properties
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
// Create sample data
var students = new List<Student>
{
new Student { FirstName = "John", LastName = "Smith", Email = "john@example.com" },
new Student { FirstName = "Jane", LastName = "Doe", Email = "jane@example.com" }
};
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.DefaultWorkSheet;
// Add header row
sheet["A1"].Value = "FirstName";
sheet["B1"].Value = "LastName";
sheet["C1"].Value = "Email";
// Use foreach to iterate through the list and write each item
int row = 2;
foreach (var item in students)
{
sheet[$"A{row}"].Value = item.FirstName;
sheet[$"B{row}"].Value = item.LastName;
sheet[$"C{row}"].Value = item.Email;
row++;
}
workBook.SaveAsCsv("students.csv", ",");
Imports IronXL
' Define the Student class with public string properties
Public Class Student
Public Property FirstName As String
Public Property LastName As String
Public Property Email As String
End Class
' Create sample data
Dim students As New List(Of Student) From {
New Student With {.FirstName = "John", .LastName = "Smith", .Email = "john@example.com"},
New Student With {.FirstName = "Jane", .LastName = "Doe", .Email = "jane@example.com"}
}
Dim workBook As WorkBook = WorkBook.Create()
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Add header row
sheet("A1").Value = "FirstName"
sheet("B1").Value = "LastName"
sheet("C1").Value = "Email"
' Use For Each to iterate through the list and write each item
Dim row As Integer = 2
For Each item In students
sheet($"A{row}").Value = item.FirstName
sheet($"B{row}").Value = item.LastName
sheet($"C{row}").Value = item.Email
row += 1
Next
workBook.SaveAsCsv("students.csv", ",")
Ten wzorzec pokazuje, jak eksportować obiekty listy do danych CSV poprzez iterację po każdej pozycji i mapowanie jej właściwości do określonych kolumn. Pętla foreach przetwarza każdego ucznia w zbiorze, a interpolacja ciągów znaków dynamicznie tworzy odwołania do komórek. W scenariuszach obejmujących mapowanie właściwości oparte na refleksji lub typy anonimowe można dostosować to podejście, iterując nad obiektami PropertyInfo z metadanych typu.
Jak przekonwertować istniejący plik Excel do formatu CSV?
Konwersja arkuszy kalkulacyjnych Excel do formatu CSV jest częstym wymaganiem podczas integracji ze starszymi systemami, przygotowywania danych do importu do bazy danych lub generowania wyników nadających się do odczytu maszynowego na podstawie raportów tworzonych przez ludzi. IronXL obsługuje tę konwersję przy minimalnym nakładzie kodu, zachowując jednocześnie dokładność danych.
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load("Monthly_Report_20251012.xlsx");
// Convert and save as CSV format
workBook.SaveAsCsv("Monthly_Report_20251012.csv");
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load("Monthly_Report_20251012.xlsx");
// Convert and save as CSV format
workBook.SaveAsCsv("Monthly_Report_20251012.csv");
Imports IronXL
' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("Monthly_Report_20251012.xlsx")
' Convert and save as CSV format
workBook.SaveAsCsv("Monthly_Report_20251012.csv")
Metoda Load() otwiera pliki Excel w różnych formatach, w tym XLSX, XLS, XLSM, a nawet istniejące pliki CSV lub TSV. Ta elastyczność oznacza, że można tworzyć standardowe potoki eksportu, które akceptują pliki wejściowe niezależnie od ich oryginalnego formatu. Pełną listę obsługiwanych formatów Excel można znaleźć w dokumentacji IronXL.
Dane wejściowe

Wynik

Jedną z wyróżniających się funkcji IronXL podczas konwersji jest automatyczna ocena formuł. Podczas zapisywania do pliku CSV IronXL oblicza wszelkie formuły obecne w arkuszu kalkulacyjnym i eksportuje wynikowe wartości zamiast tekstu formuł. Na przykład komórka zawierająca =SUM(A1:A10) zostanie wyeksportowana jako obliczona suma, co zapewni, że plik CSV będzie zawierał dane, które można wykorzystać w praktyce i które systemy niższego szczebla będą mogły natychmiast wykorzystać.
Jak działa eksport wielu arkuszy?
Podczas pracy z skoroszytami programu Excel zawierającymi wiele arkuszy, IronXL automatycznie tworzy oddzielne pliki CSV dla każdego arkusza. Ta funkcja jest szczególnie przydatna w przypadku raportów finansowych, regionalnych danych dotyczących sprzedaży lub w każdej sytuacji, w której każdy dział lub kategoria zajmuje własny arkusz w ramach jednego głównego skoroszytu.
using IronXL;
// Load a multi-sheet workbook (e.g., annual sales by region)
WorkBook workBook = WorkBook.Load("annual_sales.xlsx");
// Export all sheets to CSV -- creates separate files for each sheet
workBook.SaveAsCsv("sales_export.csv");
// Output: sales_export.North.csv, sales_export.South.csv, sales_export.East.csv, etc.
// Or export a specific worksheet
WorkSheet northRegion = workBook.GetWorkSheet("North");
northRegion.SaveAsCsv("north_region_sales.csv");
using IronXL;
// Load a multi-sheet workbook (e.g., annual sales by region)
WorkBook workBook = WorkBook.Load("annual_sales.xlsx");
// Export all sheets to CSV -- creates separate files for each sheet
workBook.SaveAsCsv("sales_export.csv");
// Output: sales_export.North.csv, sales_export.South.csv, sales_export.East.csv, etc.
// Or export a specific worksheet
WorkSheet northRegion = workBook.GetWorkSheet("North");
northRegion.SaveAsCsv("north_region_sales.csv");
Imports IronXL
' Load a multi-sheet workbook (e.g., annual sales by region)
Dim workBook As WorkBook = WorkBook.Load("annual_sales.xlsx")
' Export all sheets to CSV -- creates separate files for each sheet
workBook.SaveAsCsv("sales_export.csv")
' Output: sales_export.North.csv, sales_export.South.csv, sales_export.East.csv, etc.
' Or export a specific worksheet
Dim northRegion As WorkSheet = workBook.GetWorkSheet("North")
northRegion.SaveAsCsv("north_region_sales.csv")
Zgodnie z konwencją nazewniczą do podstawowej nazwy pliku dodawana jest nazwa każdego arkusza, co ułatwia identyfikację źródła każdego eksportowanego pliku podczas przetwarzania lub archiwizacji. W przypadku eksportów ukierunkowanych, gdzie potrzebne są tylko określone arkusze, należy pobrać żądany arkusz za pomocą GetWorkSheet() i wywołać SaveAsCsv() bezpośrednio na tym obiekcie arkusza.
Więcej informacji na temat konwersji między formatami Excel można znaleźć w dokumentacji IronXL.
Jak wyeksportować tabelę danych do pliku CSV?
Aplikacje Enterprise często pracują z obiektami DataTable wypełnianymi na podstawie zapytań do bazy danych, odpowiedzi API lub przetwarzania danych w pamięci. IronXL wypełnia lukę między tymi strukturami danych .NET a eksportem plików, zapewniając niezawodną ścieżkę z pamięci aplikacji do plików CSV, które można udostępniać. Ta metoda jest bardziej niezawodna niż ręczne pisanie plików CSV z StreamWriter, ponieważ IronXL automatycznie zajmuje się escapowaniem znaków, zarządzaniem separatorami i kodowaniem.
using IronXL;
using System.Data;
// Create and populate a DataTable with columns
DataTable products = new DataTable();
products.Columns.Add("SKU", typeof(string));
products.Columns.Add("ProductName", typeof(string));
products.Columns.Add("Price", typeof(decimal));
products.Columns.Add("InStock", typeof(int));
// Add rows of data
products.Rows.Add("SKU-001", "Wireless Mouse", 29.99m, 150);
products.Rows.Add("SKU-002", "Mechanical Keyboard", 89.99m, 75);
products.Rows.Add("SKU-003", "USB-C Hub", 45.99m, 200);
// Create workbook and transfer DataTable contents
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.DefaultWorkSheet;
// Add header row from column names
for (int col = 0; col < products.Columns.Count; col++)
{
sheet.SetCellValue(0, col, products.Columns[col].ColumnName);
}
// Add data rows using nested loops
for (int row = 0; row < products.Rows.Count; row++)
{
for (int col = 0; col < products.Columns.Count; col++)
{
sheet.SetCellValue(row + 1, col, products.Rows[row][col].ToString());
}
}
// Export to CSV
workBook.SaveAsCsv("product_inventory.csv", ",");
using IronXL;
using System.Data;
// Create and populate a DataTable with columns
DataTable products = new DataTable();
products.Columns.Add("SKU", typeof(string));
products.Columns.Add("ProductName", typeof(string));
products.Columns.Add("Price", typeof(decimal));
products.Columns.Add("InStock", typeof(int));
// Add rows of data
products.Rows.Add("SKU-001", "Wireless Mouse", 29.99m, 150);
products.Rows.Add("SKU-002", "Mechanical Keyboard", 89.99m, 75);
products.Rows.Add("SKU-003", "USB-C Hub", 45.99m, 200);
// Create workbook and transfer DataTable contents
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.DefaultWorkSheet;
// Add header row from column names
for (int col = 0; col < products.Columns.Count; col++)
{
sheet.SetCellValue(0, col, products.Columns[col].ColumnName);
}
// Add data rows using nested loops
for (int row = 0; row < products.Rows.Count; row++)
{
for (int col = 0; col < products.Columns.Count; col++)
{
sheet.SetCellValue(row + 1, col, products.Rows[row][col].ToString());
}
}
// Export to CSV
workBook.SaveAsCsv("product_inventory.csv", ",");
Imports IronXL
Imports System.Data
' Create and populate a DataTable with columns
Dim products As New DataTable()
products.Columns.Add("SKU", GetType(String))
products.Columns.Add("ProductName", GetType(String))
products.Columns.Add("Price", GetType(Decimal))
products.Columns.Add("InStock", GetType(Integer))
' Add rows of data
products.Rows.Add("SKU-001", "Wireless Mouse", 29.99D, 150)
products.Rows.Add("SKU-002", "Mechanical Keyboard", 89.99D, 75)
products.Rows.Add("SKU-003", "USB-C Hub", 45.99D, 200)
' Create workbook and transfer DataTable contents
Dim workBook As WorkBook = WorkBook.Create()
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Add header row from column names
For col As Integer = 0 To products.Columns.Count - 1
sheet.SetCellValue(0, col, products.Columns(col).ColumnName)
Next
' Add data rows using nested loops
For row As Integer = 0 To products.Rows.Count - 1
For col As Integer = 0 To products.Columns.Count - 1
sheet.SetCellValue(row + 1, col, products.Rows(row)(col).ToString())
Next
Next
' Export to CSV
workBook.SaveAsCsv("product_inventory.csv", ",")
Ten wzorzec iteruje strukturę DataTable, przenosząc najpierw nagłówki kolumn, a następnie systematycznie wypełniając każdy wiersz danych. Właściwość DefaultWorkSheet zapewnia szybki dostęp do pierwszego arkusza w nowo utworzonym skoroszycie, eliminując potrzebę jawnego tworzenia arkusza w prostych scenariuszach.
Wynik

IronXL zachowuje typy danych podczas procesu transferu, zapewniając, że wartości liczbowe zachowują swoją precyzję, a daty zachowują swoje formatowanie. Takie podejście sprawdza się w przypadku tabel danych o dowolnej wielkości, niezależnie od tego, czy zawierają one kilkadziesiąt wierszy z prostego zapytania, czy też tysiące rekordów z eksportów dużych zbiorów danych. Aby uzyskać dodatkowe możliwości manipulacji arkuszami kalkulacyjnymi przed eksportem, zapoznaj się z opcjami formatowania komórek i operacjami na zakresach.
Jak radzisz sobie z niestandardowymi separatorami w plikach CSV?
Różne systemy i standardy regionalne wymagają różnych znaków rozdzielających. Chociaż przecinek jest standardowym separatorem w wielu krajach, w regionach europejskich często preferuje się średniki, gdzie przecinki służą jako separatory dziesiętne w wartościach liczbowych. Pliki rozdzielane tabulatorami (TSV) są popularne, gdy dane źródłowe zawierają przecinki w wartościach pól. Metoda SaveAsCsv() firmy IronXL obsługuje wszystkie te scenariusze bez konieczności stosowania dodatkowego kodu do obsługi każdej linii danych wyjściowych.
using IronXL;
WorkBook workBook = WorkBook.Load("data.xlsx");
// Standard comma delimiter (default format)
workBook.SaveAsCsv("output_comma.csv", ",");
// Semicolon delimiter (common in European systems)
workBook.SaveAsCsv("output_semicolon.csv", ";");
// Tab delimiter (TSV format)
workBook.SaveAsCsv("output_tab.tsv", "\t");
// Pipe delimiter (used in some data interchange formats)
workBook.SaveAsCsv("output_pipe.csv", "|");
using IronXL;
WorkBook workBook = WorkBook.Load("data.xlsx");
// Standard comma delimiter (default format)
workBook.SaveAsCsv("output_comma.csv", ",");
// Semicolon delimiter (common in European systems)
workBook.SaveAsCsv("output_semicolon.csv", ";");
// Tab delimiter (TSV format)
workBook.SaveAsCsv("output_tab.tsv", "\t");
// Pipe delimiter (used in some data interchange formats)
workBook.SaveAsCsv("output_pipe.csv", "|");
Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("data.xlsx")
' Standard comma delimiter (default format)
workBook.SaveAsCsv("output_comma.csv", ",")
' Semicolon delimiter (common in European systems)
workBook.SaveAsCsv("output_semicolon.csv", ";")
' Tab delimiter (TSV format)
workBook.SaveAsCsv("output_tab.tsv", vbTab)
' Pipe delimiter (used in some data interchange formats)
workBook.SaveAsCsv("output_pipe.csv", "|")
Drugi parametr SaveAsCsv() akceptuje dowolny ciąg znaków jako separator, zapewniając pełną elastyczność integracji z różnymi systemami i wymaganiami regionalnymi. Podczas generowania plików do dystrybucji międzynarodowej należy wziąć pod uwagę oczekiwania lokalizacyjne systemu docelowego — europejskie systemy finansowe często wymagają separacji średnikami, podczas gdy systemy północnoamerykańskie zazwyczaj domyślnie używają przecinków. Standard RFC 4180 dotyczący formatu CSV opisuje, w jaki sposób należy cytować wartości zawierające separatory, aby zapobiec błędom parsowania.
Jakie są najlepsze praktyki dotyczące generowania plików CSV w języku C#?
Podczas pracy z plikami CSV w języku C# przestrzeganie ustalonych praktyk gwarantuje, że dane pozostaną dokładne, czytelne i kompatybilne z innymi systemami. Poniższa tabela zawiera podsumowanie najważniejszych kwestii, które należy wziąć pod uwagę:
| Ćwiczenie | Dłączego to ma znaczenie | Podejście IronXL |
|---|---|---|
| Spójne separatory | Zapobiega błędom parsowania w systemach niższego szczebla | Przekaż separator jako drugi parametr do SaveAsCsv() |
| Podaj specjalne wartości | Zachowuje integralność pól, gdy w danych występują przecinki | Obsługiwane automatycznie przez IronXL |
| Spójne formaty dat | Należy unikać niejasności w różnych lokalizacjach i systemach | Ustaw format komórek przed zapisaniem, aby kontrolować wynik |
| Należy unikać znaków nowej linii w wartościach | Zapobiega uszkodzeniu struktury wierszy | IronXL pomija osadzone znaki nowej linii podczas eksportu |
| Obsługa wyjątków | Zapewnia prawidłowe zamykanie strumieni plików | IronXL zarządza zasobami wewnętrznie |
| Sprawdź przed zapisaniem | Wykrywa problemy z danymi, zanim dotrą one do konsumentów | Użyj operacji zakresu, aby zweryfikować wartości komórek przed eksportem |
Oprócz podstawowych zasad, należy rozważyć wyraźne kodowanie przy kierowaniu treści do międzynarodowych odbiorców. Aby pliki CSV otwierane w programie Microsoft Excel wyświetlały poprawnie znaki spoza zestawu ASCII, często wymagańy jest format UTF-8 z BOM. W przypadku eksportu dużych ilości danych obejmujących miliony wierszy warto rozważyć podzielenie danych na wiele plików zamiast tworzenia jednego dużego pliku CSV — pozwala to zachować rozsądny rozmiar plików i zmniejsza obciążenie pamięci zarówno podczas generowania, jak i przetwarzania danych.
Dla zespołów tworzących potoki danych dokumentacja IronXL dotycząca asynchroniczności i strumieniowania obejmuje wzorce obsługi dużych zbiorów danych bez konieczności ładowania całych skoroszytów do pamięci. Biblioteka przykładów IronXL zawiera dodatkowe wzorce dotyczące przetwarzania wsadowego, zaplanowanych zadań eksportu oraz integracji z popularnymi frameworkami ORM, takimi jak Entity Framework.
Podczas pracy z narzędziami do przetwarzania plików CSV w ekosystemie .NET zrozumieniuiuiuiuie, gdzie IronXL wpisuje się w stosunku do podejść niższego poziomu, pomaga wybrać odpowiednie narzędzie do każdego scenariusza. W przypadku generowania czystych plików CSV bez udziału programu Excel wystarczające może być rozwiązanie StreamWriter z ręczną logiką cytowania. W przypadku wszelkich zadań związanych z kompatybilnością formatu Excel, obliczaniem formuł lub formatowaniem zaawansowanym, IronXL zapewnia bardziej niezawodną podstawę.
Jak odczytać istniejący plik CSV za pomocą IronXL?
Wczytywanie danych CSV z powrotem do aplikacji przebiega według tego samego schematu, co ładowanie dowolnego innego formatu arkusza kalkulacyjnego. Metoda Load() programu IronXL rozpoznaje pliki CSV i analizuje je zgodnie ze standardowym modelem skoroszytu/arkusza, zapewniając dostęp do poszczególnych komórek i zakresów przy użyciu tego samego interfejsu API, co w przypadku plików Excel.
using IronXL;
// Load an existing CSV file
WorkBook workBook = WorkBook.Load("employees.csv");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Access specific cells by reference
string firstHeader = sheet["A1"].StringValue;
// Iterate through all rows
foreach (var row in sheet.Rows)
{
foreach (var cell in row)
{
Console.Write(cell.StringValue + "\t");
}
Console.WriteLine();
}
// Access a range of cells
var nameColumn = sheet["B2:B100"];
foreach (var cell in nameColumn)
{
Console.WriteLine(cell.StringValue);
}
using IronXL;
// Load an existing CSV file
WorkBook workBook = WorkBook.Load("employees.csv");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Access specific cells by reference
string firstHeader = sheet["A1"].StringValue;
// Iterate through all rows
foreach (var row in sheet.Rows)
{
foreach (var cell in row)
{
Console.Write(cell.StringValue + "\t");
}
Console.WriteLine();
}
// Access a range of cells
var nameColumn = sheet["B2:B100"];
foreach (var cell in nameColumn)
{
Console.WriteLine(cell.StringValue);
}
Imports IronXL
' Load an existing CSV file
Dim workBook As WorkBook = WorkBook.Load("employees.csv")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Access specific cells by reference
Dim firstHeader As String = sheet("A1").StringValue
' Iterate through all rows
For Each row In sheet.Rows
For Each cell In row
Console.Write(cell.StringValue & vbTab)
Next
Console.WriteLine()
Next
' Access a range of cells
Dim nameColumn = sheet("B2:B100")
For Each cell In nameColumn
Console.WriteLine(cell.StringValue)
Next
Ta spójność między operacjami odczytu i zapisu oznacza, że Twój zespół musi nauczyć się obsługi tylko jednego interfejsu API do wszystkich zadań związanych z arkuszami kalkulacyjnymi. Ta sama metoda WorkBook.Load(), która otwiera pliki CSV, obsługuje również formaty XLSX, XLS i XLSM — jest to przydatne podczas tworzenia potoków przetwarzania, które akceptują dane wejściowe w wielu formatach. Więcej informacji na temat odczytu plików CSV za pomocą IronXL można znaleźć w dokumentacji.
Jakie są Twoje kolejne kroki?
W niniejszym przewodniku omówiono podstawowe wzorce tworzenia plików CSV i zarządzania nimi przy użyciu biblioteki IronXL w języku C#:
WorkBook.Create()do inicjalizacji nowych arkuszy kalkulacyjnych w pamięciWorkBook.Load()do otwierania istniejących plików Excel i CSV w dowolnym obsługiwanym formacieSaveAsCsv()do eksportowania danych z konfigurowalnymi separatorami- Eksport pojedynczych arkuszy przy użyciu
GetWorkSheet()w celu ukierunkowanych konwersji DataTablewzorce iteracji dla procesów przepływu danych z bazy danych do plików CSV- Eksport listy obiektów przy użyciu pętli
foreach - Wczytywanie danych CSV z powrotem do aplikacji z pełnym dostępem do zakresu
Aby wykorzystać te techniki w praktyce, rozpocznij bezpłatny okres próbny IronXL, aby poznać pełen zakres możliwości arkusza kalkulacyjnego bez ograniczeń czasowych. Gdy wszystko będzie gotowe do wdrożenia produkcyjnego, zapoznaj się z opcjami licencyjnymi IronXL, aby znaleźć plan odpowiedni dla wielkości Twojego zespołu i wymagań dotyczących użytkowania.
Aby zapoznać się z dodatkowymi przykładami obejmującymi zaawansowane scenariusze, takie jak stylizacja komórek, tworzenie formuł, generowanie wykresów i ochrona hasłem, zapoznaj się z dokumentacją IronXL oraz pełną biblioteką przykładów kodu. Seria samouczków IronXL omawia bardziej złożone scenariusze integracji, w tym eksport tabel danych, konwersje formatów oraz zapisywanie do plików CSV.
Często Zadawane Pytania
Czym jest plik CSV i dlaczego jest ważny?
Plik CSV, czyli plik z wartościami rozdzielonymi przecinkami, to format zwykłego tekstu używany do wymiany danych między aplikacjami, bazami danych i systemami raportowania. Jego uniwersalny format sprawia, że jest przydatny do eksportowania list, generowania raportów i przygotowywania danych do analizy.
Jak utworzyć plik CSV przy użyciu języka C#?
Możesz utworzyć plik CSV w języku C# za pomocą IronXL, tworząc skoroszyt (WorkBook), wypełniając arkusz (WorkSheet) danymi i wywołując metodę SaveAsCsv() z żądaną ścieżką wyjściową i znakiem separatora.
Jakie są zalety korzystania z IronXL do tworzenia plików CSV?
IronXL zapewnia bezbłędne podejście do tworzenia plików CSV w języku C#, obsługując złożone struktury danych bardziej efektywnie niż tradycyjne metody ręczne, takie jak StreamWriter. Obsługuje również konwersję plików Excel do formatu CSV, obliczanie formuł oraz eksport wielu arkuszy.
W jaki sposób IronXL radzi sobie ze złożonością danych podczas tworzenia plików CSV?
IronXL automatycznie zarządza escapowaniem znaków, obsługą separatorów, obliczaniem formuł i zachowaniem typów danych podczas eksportu do formatu CSV, minimalizując błędy i zapewniając integralność danych.
Czy IronXL może służyć do importowania danych do platform analitycznych?
Tak, IronXL może przygotować dane do importu do platform analitycznych, ułatwiając tworzenie dobrze ustrukturyzowanych plików CSV, zapewniając kompatybilność i łatwość transferu danych.
Czy za pomocą IronXL można zautomatyzować generowanie plików CSV?
IronXL obsługuje automatyzację w języku C#, umożliwiając programistom programowe generowanie plików CSV w ramach większych aplikacji .NET, co zwiększa wydajność i produktywność.
Jakie są typowe pułapki związane z ręcznym tworzeniem plików CSV w języku C#?
Metody ręczne, takie jak StreamWriter, wymagają niestandardowego kodu do escapowania znaków, zarządzania separatorami i kodowania — a wszystko to staje się podatne na błędy wraz ze wzrostem złożoności danych.
W jaki sposób IronXL usprawnia proces tworzenia plików CSV w programowaniu .NET?
IronXL upraszcza proces tworzenia plików CSV, oferując intuicyjne metody, które automatycznie radzą sobie ze złożonością danych, zapewniając dokładne i wydajne generowanie plików CSV w aplikacjach .NET.
Czy IronXL może eksportować dane z baz danych do plików CSV?
Tak, IronXL może eksportować obiekty DataTable wypełnione wynikami zapytań do bazy danych bezpośrednio do plików CSV, ułatwiając wymianę danych i integrację z innymi systemami.
Jak odczytać istniejący plik CSV za pomocą IronXL?
Użyj funkcji WorkBook.Load() wraz ze ścieżką do pliku CSV. IronXL analizuje plik CSV i przekształca go do standardowego modelu skoroszytu/arkusza, zapewniając dostęp do poszczególnych komórek i zakresów przy użyciu tego samego interfejsu API, co w przypadku plików Excel.




