Jak załadować arkusz kalkulacyjny w .NET

Jak załadować arkusz kalkulacyjny w .NET

Aspose.Cells FOSS for .NET umożliwia otwieranie istniejących arkuszy kalkulacyjnych XLSX za pomocą jednego wywołania konstruktora i zapewnia odporne na błędy wczytywanie plików, które mają drobne uszkodzenia strukturalne. Zainstaluj bibliotekę z NuGet przy użyciu dotnet add package Aspose.Cells_FOSS.

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

dotnet add package Aspose.Cells_FOSS

Sprawdź, czy pakiet jest obecny:

dotnet list package | grep Aspose.Cells_FOSS

Krok 2: Importuj przestrzeń nazw

Dodaj tę dyrektywę na początku swojego pliku C#:

using Aspose.Cells_FOSS;

Krok 3: Załaduj plik XLSX

Przekaż ścieżkę pliku do konstruktora Workbook. Biblioteka odczytuje plik XLSX i wypełnia obiekt skoroszytu w pamięci.

using Aspose.Cells_FOSS;

var wb = new Workbook("data.xlsx");
Console.WriteLine("Loaded " + wb.Worksheets.Count + " sheet(s)");
Console.WriteLine("First sheet: " + wb.Worksheets[0].Name);
Console.WriteLine("A1 value: " + wb.Worksheets[0].Cells["A1"].StringValue);

Krok 4: Ładowanie z opcjami naprawy odpornej na błędy

Dla plików, które mogą mieć uszkodzenia ZIP lub XML, dostarcz obiekt LoadOptions z TryRepairPackage i TryRepairXml ustawionymi na true. Owiń wywołanie w try/catch dla WorkbookLoadException na wypadek, gdy plik jest nieodwracalny.

using Aspose.Cells_FOSS;

var opts = new LoadOptions
{
    TryRepairPackage = true,
    TryRepairXml = true,
};

try
{
    var wb = new Workbook("possibly-corrupt.xlsx", opts);
    Console.WriteLine("Loaded successfully");
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Unrecoverable file: " + ex.Message);
}

Krok 5: Sprawdź diagnostykę ładowania

Po załadowaniu sprawdź Workbook.LoadDiagnostics, aby zobaczyć, czy biblioteka zastosowała jakiekolwiek naprawy. HasRepairs jest true, jeśli zastosowano naprawę; HasDataLossRisk jest true, jeśli dane mogły zostać odrzucone. Iteruj Issues, aby uzyskać dostęp do poszczególnych rekordów DiagnosticEntry.

using Aspose.Cells_FOSS;

var opts = new LoadOptions { TryRepairPackage = true, TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;

if (diag.HasRepairs)
{
    Console.WriteLine("Repairs were applied. Data loss risk: " + diag.HasDataLossRisk);
    foreach (var entry in diag.Issues)
        Console.WriteLine($"  [{entry.Severity}] {entry.Code}: {entry.Message}");
}
else
{
    Console.WriteLine("File loaded cleanly — no repairs.");
}

Krok 6: Uzyskaj dostęp do danych arkusza

Po załadowaniu uzyskaj dostęp do arkuszy kalkulacyjnych według indeksu lub nazwy i odczytaj wartości komórek przy użyciu Cell.StringValue lub Cell.Value.

using Aspose.Cells_FOSS;

var wb = new Workbook("data.xlsx");

// By index
var sheet = wb.Worksheets[0];
Console.WriteLine("Sheet: " + sheet.Name);
Console.WriteLine("A1: " + sheet.Cells["A1"].StringValue);

// By name
var named = wb.Worksheets["Report"];
if (named != null)
    Console.WriteLine("Report!B2: " + named.Cells["B2"].StringValue);

Typowe problemy i rozwiązania

WorkbookLoadException jest zgłaszany nawet przy włączonych opcjach naprawy.
To oznacza, że struktura ZIP pliku jest zbyt uszkodzona, aby algorytmy naprawcze mogły ją odzyskać. Zweryfikuj, czy plik jest prawidłowym archiwum ZIP (np. spróbuj unzip -t file.xlsx). Jeśli plik jest całkowicie uszkodzony, nie może być otwarty przez żadną bibliotekę.

Załadowany skoroszyt ma mniej arkuszy niż oczekiwano. Operacja naprawy mogła usunąć arkusze, które odwoływały się do brakujących części. Sprawdź LoadDiagnostics.Issues pod kątem wpisów z DataLossRisk = true i powiadom użytkownika.

Wartości komórek są puste po załadowaniu.
Upewnij się, że odwołujesz się do prawidłowego indeksu lub nazwy arkusza. Użyj wb.Worksheets.Count, aby potwierdzić oczekiwaną liczbę arkuszy. Sprawdź również, czy plik XLSX nie jest zabezpieczony hasłem (pliki zabezpieczone hasłem nie są obecnie obsługiwane).

Workbook konstruktor zawiesza się przy dużym pliku.
Konstruktor jest synchroniczny i ładuje cały plik do pamięci. Dla bardzo dużych plików uruchom ładowanie w wątku tła, aby interfejs użytkownika pozostał responsywny.

DiagnosticEntry.Severity pokazuje Error, ale HasRepairs jest false. HasRepairs odzwierciedla, czy naprawa została pomyślnie zastosowana, a nie czy wykryto błędy. Wpis o ciężkości Error z RepairApplied = false oznacza, że problem został wykryty, ale nie można go naprawić — potraktuj to jako możliwe ostrzeżenie o integralności danych.

Najczęściej zadawane pytania

Czy mogę wczytać plik XLSX ze strumienia zamiast ścieżki do pliku?

Tak. Konstruktor Workbook ma przeciążenia, które przyjmują obiekt Stream. Przekaż swój strumień wraz z instancją LoadOptions, jeśli potrzebne jest ładowanie odporne na błędy.

Czy biblioteka obsługuje ładowanie plików XLSX zabezpieczonych hasłem?

Pliki chronione hasłem nie są dostępne w bieżącym interfejsie API. Próba ich załadowania spowoduje błąd WorkbookLoadException.

Jak sprawdzić, który arkusz jest aktywny w załadowanym skoroszycie?

Odczytaj Workbook.Worksheets.ActiveSheetName, aby uzyskać nazwę arkusza, który był ostatnio aktywny w momencie zapisu pliku.

Czy mogę wczytać wiele plików XLSX jednocześnie?

Tak. Każda instancja Workbook jest niezależna. Możesz tworzyć wiele obiektów Workbook na osobnych wątkach bez współdzielonego stanu.

Co się stanie, jeśli komórka formuły zostanie wczytana, a wynik w pamięci podręcznej jest nieobecny?

Cell.StringValue zwraca pusty ciąg. Cell.Formula nadal zwraca ciąg formuły. Wartość buforowana jest wypełniana tylko wtedy, gdy Excel (lub kompatybilna aplikacja) otwiera i zapisuje plik.

Zobacz także

 Polski