Przejdź do treści stopki
KORZYSTANIE Z IRONXL

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 CSV przy użyciu prostego var line podejścia z StringBuilder lub StreamWriter, ale te ręczne metody szybko stają się podatne na błędy w miarę wzrostu 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 dlaczego 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

C# Zapis do CSV przy użyciu IronXL: Obraz 1 - Instalacja

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 używając instrukcji using:

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

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 podejść polegających na StreamWriter lub StringBuilder do ręcznego pisania plików CSV, IronXL automatycznie radzi sobie z całą złożonością prawidłowego formatowania CSV -- w tym z ucieczką 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 systemowych, 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", ",")
$vbLabelText   $csharpLabel

Metoda WorkBook.Create() inicjuje nowy arkusz kalkulacyjny całkowicie w pamięci, nie wymagając tymczasowych plików ani wejścia/wyjścia dyskowego, dopóki nie zostanie wykonana operacja ostatecznego zapisu. Metoda CreateWorkSheet() dodaje nazwany arkusz do skoroszytu -- ta nazwa staje się istotna przy eksportowaniu skoroszytów wieloarkuszowych do CSV.

Wynik

C# Zapis do CSV przy użyciu IronXL: Obraz 2 - Wydruk wynikowy CSV

Odniesienia do komórek, takie jak sheet["A1"], zapewniają bezpośredni dostęp do konkretnych komórek, w których można przypisać 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 zapisywania każdego elementu do arkusza. Oto przykład użycia klasy Student z publicznymi właściwościami 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", ",")
$vbLabelText   $csharpLabel

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 kolekcji, a interpolacja łańcuchowa dynamicznie konstruuje odniesienia do komórek. W scenariuszach obejmujących mapowanie właściwości na bazie refleksji lub typy anonimowe, można dostosować to podejście poprzez iterację obiektów 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")
$vbLabelText   $csharpLabel

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

C# Zapis do CSV przy użyciu IronXL: Obraz 3 - Przykladowe wejście Excel

Wynik

C# Zapis do CSV przy użyciu IronXL: Obraz 4 - Eksport Excel do CSV

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, zapewniając, że plik CSV zawiera dane do natychmiastowego użycia przez systemy docelowe.

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")
$vbLabelText   $csharpLabel

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. Dla ukierunkowanego eksportu, gdzie potrzebne są tylko określone arkusze, pobierz żądany arkusz przy użyciu GetWorkSheet() i wywołaj 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 klasy Enterprise często pracują z obiektami DataTable zapełnionymi z zapytań bazodanowych, 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 obsługuje ucieczkę znaków, zarządzanie delimitatorami i kodowanie.

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", ",")
$vbLabelText   $csharpLabel

Ten wzorzec iteruje przez strukturę DataTable, najpierw przenosząc 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 roboczego w nowo utworzonym skoroszycie, eliminując potrzebę jawnego tworzenia arkuszy w prostych scenariuszach.

Wynik

C# Zapis do CSV przy użyciu IronXL: Obraz 5 - Eksport DataTable do CSV

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() IronXL radzi sobie z wszystkimi tymi scenariuszami bez potrzeby dodatkowego kodu do obsługi każdej linii wynikowej.

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", "|")
$vbLabelText   $csharpLabel

Drugi parametr SaveAsCsv() akceptuje dowolny ciąg jako delimiter, zapewniając pełną elastyczność integracji z różnorodnymi 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 generowania plików CSV w 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ę:

Najlepsze praktyki dotyczące generowania plików CSV w języku C#
Ćwiczenie Dlaczego 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 wymagany 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 zrozumienie, gdzie IronXL wpisuje się w stosunku do podejść niższego poziomu, pomaga wybrać odpowiednie narzędzie do każdego scenariusza. Dla czystej generacji CSV bez zaangażowania Excela, StreamWriter z ręczną logiką cytowania może być wystarczający. 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() IronXL rozpoznaje pliki CSV i analizuje je na standardowy model skoroszyt/arkusz roboczy, dając dostęp do poszczególnych komórek i zakresów przy użyciu tego samego 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
$vbLabelText   $csharpLabel

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 także formaty XLSX, XLS i XLSM -- przydatna podczas tworzenia potoków, które akceptują dane wejściowe w różnych formatach. Więcej informacji znajdziesz w dokumentacji dotyczącej czytania plików CSV z IronXL.

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 inicjowania nowych arkuszy kalkulacyjnych w pamięci
  • WorkBook.Load() do otwierania istniejących plików Excel i CSV w dowolnym obsługiwanym formacie
  • SaveAsCsv() do eksportowania danych z dostosowywalnymi delimiterami
  • Eksport poszczególnych arkuszy przy użyciu GetWorkSheet() do ukierunkowanych konwersji
  • DataTable wzorce iteracji dla przepływów pracy baza danych-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.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie