Przejdź do treści stopki
KORZYSTANIE Z IRONXL

Jak odczytywać pliki CSV z przecinkami w języku C#

Dłączego programiści .NET potrzebują lepszego rozwiązania do obsługi plików CSV?

Pliki CSV umożliwiają wymianę danych między niezliczoną liczbą aplikacji .NET. Od raportów finansowych po systemy magazynowe — masz swobodę programowego tworzenia plików CSV za pomocą zaledwie kilku wierszy kodu. Podczas gdy biblioteki takie jak CsvHelper obsługują podstawowe operacje CSV, współcześni programiści mają do czynienia ze złożonymi scenariuszami: konwersją skoroszytów Excel zawierających formuły, zachowaniem typów danych podczas eksportu oraz obsługą procesów związanych z arkuszami kalkulacyjnymi na poziomie Enterprise. IronXL odpowiada na te wyzwania, łącząc solidne zapisywanie plików CSV z kompleksową funkcjonalnością Excela w jednym rozwiązaniu, które z łatwością obsługuje wiele kolumn w ramach jednej, niezależnej biblioteki zgodnej ze standardami RFC 4180.

Dzięki temu jest to idealne rozwiązanie dla programistów tworzących niestandardowy moduł zapisujący pliki CSV w środowisku .NET lub parser plików CSV w środowisku .NET, który obsługuje wiele kolumn, funkcje specyficzne dla wierszy, wpływające wyłącznie na przetwarzany wiersz, oraz automatycznie wnioskowane separatory.

Pierwsze kroki z IronXL

Instalacja IronXL zajmuje kilka sekund za pomocą menedżera pakietów NuGet:

Install-Package IronXl.Excel

Po zainstalowaniu dodaj przestrzeń nazw IronXL, aby rozpocząć pisanie plików CSV i efektywną pracę z wartościami rozdzielonymi:

using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create a new workbook and worksheet
        WorkBook workBook = WorkBook.Create();
        WorkSheet workSheet = workBook.CreateWorkSheet("data");
        // Add headers
        workSheet["A1"].Value = "Product";
        workSheet["B1"].Value = "Quantity";
        workSheet["C1"].Value = "Price";
        // Add data
        workSheet["A2"].Value = "Widget";
        workSheet["B2"].Value = 100;
        workSheet["C2"].Value = 19.99;
        // Save as CSV with comma delimiter
        workBook.SaveAsCsv("inventory.csv", ",");
    }
}
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create a new workbook and worksheet
        WorkBook workBook = WorkBook.Create();
        WorkSheet workSheet = workBook.CreateWorkSheet("data");
        // Add headers
        workSheet["A1"].Value = "Product";
        workSheet["B1"].Value = "Quantity";
        workSheet["C1"].Value = "Price";
        // Add data
        workSheet["A2"].Value = "Widget";
        workSheet["B2"].Value = 100;
        workSheet["C2"].Value = 19.99;
        // Save as CSV with comma delimiter
        workBook.SaveAsCsv("inventory.csv", ",");
    }
}
Imports IronXL

Class Program
    Shared Sub Main(args As String())
        ' Create a new workbook and worksheet
        Dim workBook As WorkBook = WorkBook.Create()
        Dim workSheet As WorkSheet = workBook.CreateWorkSheet("data")
        ' Add headers
        workSheet("A1").Value = "Product"
        workSheet("B1").Value = "Quantity"
        workSheet("C1").Value = "Price"
        ' Add data
        workSheet("A2").Value = "Widget"
        workSheet("B2").Value = 100
        workSheet("C2").Value = 19.99
        ' Save as CSV with comma delimiter
        workBook.SaveAsCsv("inventory.csv", ",")
    End Sub
End Class
$vbLabelText   $csharpLabel

Ten prosty program testujący konsolę pokazuje, jak zapisywać zawartość CSV bezpośrednio z kodu C#, tworząc obiekt Workbook zawierający nasze dane. Metoda SaveAsCsv używa domyślnego separatora (przecinka), ale pozwala opcjonalnie zdefiniować sep dla różnych ustawień regionalnych; jest to szczególnie pomocne w przypadku obsługi separatora dziesiętnego lub alternatywnego znaku separatora kolumn. Wewnętrznie sep obsługuje alokację tablicy dla bufora wyjściowego. Wspomniany wcześniej parametr sep pozwala zdefiniować ten znak.

Pokazaliśmy również, jak zapewnić statyczny punkt wejścia oraz jak efektywnie zarządzać pamięcią przy użyciu statycznie zdefiniowanej puli zasobów, co pozwala na wysoką wydajność w wielu wierszach.

Zaawansowane techniki tworzenia plików CSV

Jak odczytywać pliki CSV z przecinkami w języku C#: Rysunek 1 – Przykładowy wynik CSV z wykorzystaniem IronXL

Zaawansowane techniki tworzenia plików CSV

Konwersja skoroszytów Excel do formatu CSV

IronXL doskonale radzi sobie z konwersją istniejących plików Excel do formatu CSV, obliczaniem formuł i zachowaniem integralności danych. Jest to niezbędne podczas tworzenia plików CSV zawierających zarówno wiersze nagłówkowe, jak i dane generowane dynamicznie.

// Load an Excel file with formulas and formatting
WorkBook workBook = WorkBook.Load("financial_report.xlsx");
// IronXL evaluates formulas before export
workBook.EvaluateAll();
// Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",");
// Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
// Load an Excel file with formulas and formatting
WorkBook workBook = WorkBook.Load("financial_report.xlsx");
// IronXL evaluates formulas before export
workBook.EvaluateAll();
// Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",");
// Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
' Load an Excel file with formulas and formatting
Dim workBook As WorkBook = WorkBook.Load("financial_report.xlsx")
' IronXL evaluates formulas before export
workBook.EvaluateAll()
' Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",")
' Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
$vbLabelText   $csharpLabel

Podczas konwersji skoroszytów wielarkuszowych IronXL automatycznie generuje osobne pliki CSV dla każdego arkusza. Obliczenia formuł są wykonywane przed eksportem, co zapewnia dokładność danych w końcowym pliku CSV. Ale to nie jedyna cecha. Domyślny, automatycznie wyznaczany separator zapewnia kompatybilność w różnych regionach, a wiele wierszy lub wiele kolumn jest obsługiwane płynnie.

Można również użyć separatora nullable w środowiskach dynamicznych, w których domyślne obsługiwane separatory są różne.

Wynik

Po pierwsze, tutaj można zobaczyć pliki CSV wygenerowane z naszego wielarkuszowego pliku Excel:

Jak odczytywać pliki CSV z przecinkami w języku C#: Rysunek 2 – Pliki CSV

A oto przykładowe porównanie jednego z arkuszy Excel z odpowiadającym mu plikiem CSV:

Jak odczytywać pliki CSV z przecinkami w języku C#: Rysunek 3 – Przykładowy wynik

Eksportowanie tabeli danych do pliku CSV

W przypadku aplikacji opartych na bazach danych IronXL usprawnia eksport tabel danych (DataTable). Aby zapewnić większą przejrzystość, zmienną var ustawiamy na Datarow zamiast typowej zmiennej ref var v.

// Assume dataTable contains query results
DataTable dataTable = GetSalesData();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");
// Import DataTable directly
var row = 1;
foreach (var dataRow in dataTable.Rows)
{
    for (var col = 0; col < dataTable.Columns.Count; col++)
    {
        workSheet.SetCellValue(row, col, dataRow[col].ToString());
    }
    row++;
}
// Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";");
// Assume dataTable contains query results
DataTable dataTable = GetSalesData();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");
// Import DataTable directly
var row = 1;
foreach (var dataRow in dataTable.Rows)
{
    for (var col = 0; col < dataTable.Columns.Count; col++)
    {
        workSheet.SetCellValue(row, col, dataRow[col].ToString());
    }
    row++;
}
// Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";");
Imports System.Data

' Assume dataTable contains query results
Dim dataTable As DataTable = GetSalesData()
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("sales")
' Import DataTable directly
Dim row As Integer = 1
For Each dataRow As DataRow In dataTable.Rows
    For col As Integer = 0 To dataTable.Columns.Count - 1
        workSheet.SetCellValue(row, col, dataRow(col).ToString())
    Next
    row += 1
Next
' Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";")
$vbLabelText   $csharpLabel

Podczas importowania każdy poziomy zestaw danych z kolekcji dataTable.Rows staje się nowym wierszem w arkuszu. IronXL zachowuje typy danych podczas konwersji, co oznacza, że liczby pozostają liczbami, daty zachowują formatowanie, a tekst poprawnie obsługuje znaki specjalne bez dodatkowej konfiguracji.

Wynik

Tutaj możesz zobaczyć nasze przykładowe źródło danych obok wyjściowego pliku CSV:

Jak odczytywać pliki CSV z przecinkami w języku C#: Rysunek 4 — Eksportowanie tabeli danych do pliku CSV

IronXL vs CsvHelper: Porównanie tworzenia plików CSV

Rozważmy ten scenariusz eksportu danych pracowników, ilustrujący procesy analizowania i zapisywania plików CSV.

Implementacja CsvHelper:

using (var writer = new StreamWriter("employees.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(employees);
}
using (var writer = new StreamWriter("employees.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(employees);
}
Imports System.Globalization
Imports System.IO
Imports CsvHelper

Using writer As New StreamWriter("employees.csv")
    Using csv As New CsvWriter(writer, CultureInfo.InvariantCulture)
        csv.WriteRecords(employees)
    End Using
End Using
$vbLabelText   $csharpLabel

Wdrożenie IronXL:

WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("employees");
// Add data with automatic type handling
int rowIndex = 1;
foreach (var emp in employees)
{
    workSheet[$"A{rowIndex}"].Value = emp.Name;
    workSheet[$"B{rowIndex}"].Value = emp.Salary;
    workSheet[$"C{rowIndex}"].Value = emp.StartDate;
    rowIndex++;
}
workBook.SaveAsCsv("employees.csv", ",");
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("employees");
// Add data with automatic type handling
int rowIndex = 1;
foreach (var emp in employees)
{
    workSheet[$"A{rowIndex}"].Value = emp.Name;
    workSheet[$"B{rowIndex}"].Value = emp.Salary;
    workSheet[$"C{rowIndex}"].Value = emp.StartDate;
    rowIndex++;
}
workBook.SaveAsCsv("employees.csv", ",");
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("employees")
' Add data with automatic type handling
Dim rowIndex As Integer = 1
For Each emp In employees
    workSheet($"A{rowIndex}").Value = emp.Name
    workSheet($"B{rowIndex}").Value = emp.Salary
    workSheet($"C{rowIndex}").Value = emp.StartDate
    rowIndex += 1
Next
workBook.SaveAsCsv("employees.csv", ",")
$vbLabelText   $csharpLabel

Funkcja

CsvHelper

IronXL

Podstawy pisania w formacie CSV

Konwersja plików Excel do CSV

Ocena formuły

Obsługa wielu arkuszy

Zachowanie typów danych

Podręcznik

Automatyczne

Obsługa formatu Excel

XLSX, XLS, XLSM

Nie jest wymagańy pakiet MS Office

Podczas gdy CsvHelper sprawnie obsługuje proste operacje zapisywania kolumn, IronXL zapewnia elastyczność pracy z wieloma wierszami, interpolowanymi ciągami znaków i scenariuszami dynamicznego generowania kodu, a nawet umożliwia optymalizacje niskopoziomowe za pomocą konstrukcji takich jak ref struct link.

Programiści mogą wyliczać wiersze spełniające określone kryteria, zarządzać domyślnymi, automatycznie wywnioskowanymi separatorami, a nawet testować za pomocą prostych programów konsolowych, które udostępniają funkcje specyficzne dla wierszy oraz tylko klucz każdego wpisu do celów debugowania.

Funkcje dla Enterprise i najlepsze praktyki

Metoda SaveAsCsv biblioteki IronXL oferuje funkcje klasy Enterprise:

  • Niestandardowe separatory: Obsługa przecinka, średnika, tabulacji lub dowolnego znaku (domyślny separator można zastąpić za pomocą separatora sep)
  • Opcje kodowania: UTF-8, UTF-16 i kodowania niestandardowe
  • Obliczanie formuł: Oblicza formuły programu Excel przed eksportem
  • Obsługa wielu platform: Działa w systemach Windows, Linux i macOS

Programiści mogą również stosować metody rozszerzeń, aby uzyskać dostęp do wielu kolumn w celu wydajnego przetwarzania lub pisać wiersze CSV obejmujące wiele wierszy, gdy wymagańe jest zawijanie tekstu.

Typowe problemy i rozwiązania

Podczas pracy z eksportami CSV programiści często napotykają następujące wyzwania:

  • Znaki specjalne w danych: IronXL automatycznie zamienia znaki cudzysłowu, przecinki i znaki nowej linii
  • Obsługa dużych plików: Użyj zakresów arkusza, aby przetwarzać dane partiami,
  • Kwestie związane z kodowaniem: Należy określić kodowanie UTF-8 dla znaków międzynarodowych
  • Brakujące typy danych: IronXL domyślnie zachowuje formaty liczbowe i daty

Aby uzyskać szczegółowe informacje dotyczące rozwiązywania problemów, odwiedź dokumentację CSV IronXL, Dokumentację API oraz zasoby pomocy technicznej.

Zacznij tworzyć swój program do zapisywania plików CSV już dziś

IronXL sprawia, że zapisywanie plików CSV przestaje być wyzwaniem związanym z parsowaniem, a staje się prostą operacją. Dzięki połączeniu funkcji CSV z obsługą skoroszytów Excel, obliczaniem formuł i automatyczną obsługą typów eliminuje to złożoność związaną z zarządzaniem wieloma bibliotekami lub ręczną konwersją danych.

Chcesz usprawnić swoje procesy związane z plikami CSV? Rozpocznij bezpłatny okres próbny już od $liteLicense.

Często Zadawane Pytania

Dlaczego programiści .NET potrzebują lepszego rozwiązania do obsługi plików CSV?

Programiści .NET często napotykają trudności podczas pracy z plikami CSV zawierającymi wbudowane przecinki lub znaki specjalne. IronXL zapewnia zaawansowane funkcje, które pozwalają bez wysiłku radzić sobie z tymi złożonymi problemami, poprawiając dokładność i wydajność parsowania danych.

W jaki sposób IronXL obsługuje pola z cudzysłowami w plikach CSV?

IronXL został zaprojektowany do dokładnego analizowania plików CSV z polami w cudzysłowie, zapewniając, że dane zawierające przecinki lub inne znaki specjalne są poprawnie interpretowane i przetwarzane bez błędów.

Jakie są zalety korzystania z IronXL do parsowania plików CSV w języku C#?

IronXL oferuje rozbudowane funkcje do analizowania plików CSV, w tym obsługę znaków specjalnych, pól w cudzysłowie i dużych zbiorów danych. Zwiększa to niezawodność i skraca czas poświęcany przez programistów na debugowanie problemów związanych z plikami CSV.

Czy IronXL obsługuje pliki CSV zawierające znaki specjalne?

Tak, IronXL obsługuje pliki CSV zawierające różne znaki specjalne, zapewniając dokładny odczyt i przetwarzanie wszystkich danych bez powodowania błędów parsowania lub utraty danych.

Czym biblioteka IronXL różni się od innych bibliotek do parsowania plików CSV?

IronXL wyróżnia się łatwością obsługi złożonych scenariuszy CSV, takich jak wbudowane przecinki i pola w cudzysłowie. Przyjazny dla użytkownika interfejs API i wszechstronna funkcjonalność sprawiają, że jest to preferowany wybór dla programistów pracujących z danymi CSV w języku C#.

Czy za pomocą IronXL można przetwarzać duże pliki CSV?

IronXL jest zoptymalizowany pod kątem wydajności i może efektywnie przetwarzać duże pliki CSV, dzięki czemu nadaje się do aplikacji obsługujących rozległe zbiory danych.

W jaki sposób IronXL poprawia niezawodność przetwarzania danych CSV?

IronXL zwiększa niezawodność poprzez dokładną obsługę plików CSV zawierających przecinki i znaki specjalne, zmniejszając prawdopodobieństwo wystąpienia błędów podczas analizowania danych i zapewniając ich integralność.

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

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