Як завантажити електронну таблицю в .NET

Як завантажити електронну таблицю в .NET

Aspose.Cells FOSS for .NET дозволяє відкривати існуючі електронні таблиці XLSX за допомогою одного виклику конструктора та забезпечує стійкий до помилок шлях завантаження для файлів з незначними структурними пошкодженнями. Встановіть бібліотеку з NuGet за допомогою dotnet add package Aspose.Cells_FOSS.

Посібник крок за кроком

Крок 1: Встановити пакет

dotnet add package Aspose.Cells_FOSS

Перевірте, чи присутній пакет:

dotnet list package | grep Aspose.Cells_FOSS

Крок 2: Імпорт простору імен

Додайте цю директиву у верхню частину вашого файлу C#:

using Aspose.Cells_FOSS;

Крок 3: Завантажити файл XLSX

Передайте шлях до файлу у конструктор Workbook. Бібліотека читає файл XLSX і заповнює об’єкт робочої книги в пам’яті.

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);

Крок 4: Завантажити з параметрами відновлення, стійкими до збоїв

Для файлів, які можуть мати пошкодження ZIP або XML, надайте об’єкт LoadOptions з TryRepairPackage та TryRepairXml, встановленими в true. Обгорніть виклик у try/catch для WorkbookLoadException на випадок, якщо файл не підлягає відновленню.

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);
}

Крок 5: Перевірка діагностики завантаження

Після завантаження перевірте Workbook.LoadDiagnostics, щоб дізнатися, чи бібліотека застосувала будь‑які виправлення. HasRepairs є true, якщо було застосовано виправлення; HasDataLossRisk є true, якщо дані могли бути відкинуті. Ітеруйте Issues, щоб отримати доступ до окремих записів 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.");
}

Крок 6: Доступ до даних листа

Після завантаження отримуйте доступ до листів за індексом або назвою та читайте значення клітинок, використовуючи Cell.StringValue або 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);

Поширені проблеми та виправлення

WorkbookLoadException генерується навіть при ввімкнених параметрах відновлення.
Це означає, що структура ZIP‑файлу занадто пошкоджена, щоб алгоритми відновлення могли її виправити. Перевірте, чи файл є дійсним ZIP‑архівом (наприклад, спробуйте unzip -t file.xlsx). Якщо файл повністю пошкоджений, його не можна відкрити жодною бібліотекою.

Завантажена робоча книга містить менше листів, ніж очікувалося. Операція відновлення могла видалити листи, які посилалися на відсутні частини. Перевірте LoadDiagnostics.Issues на записи з DataLossRisk = true і повідомте користувача.

Значення клітинок порожні після завантаження.
Переконайтеся, що ви звертаєтеся до правильного індексу або назви листа. Використайте wb.Worksheets.Count, щоб підтвердити очікувану кількість листів. Також перевірте, що файл XLSX не захищений паролем (файли, захищені паролем, наразі не підтримуються).

Workbook конструктор зависає на великому файлі.
Конструктор синхронний і завантажує весь файл у пам’ять. Для дуже великих файлів виконуйте завантаження у фоновому потоці, щоб UI залишався чуйним.

DiagnosticEntry.Severity показує Error, але HasRepairs є false. HasRepairs відображає, чи була успішно застосована ремонтна операція, а не чи виявлені помилки. Запис з рівнем серйозності Error‑severity і RepairApplied = false означає, що проблема була виявлена, але не могла бути виправлена — розглядайте це як можливе попередження про цілісність даних.

Часті запитання

Чи можу я завантажити файл XLSX з Stream замість шляху до файлу?

Так. Конструктор Workbook має перевантаження, які приймають об’єкт Stream. Передайте ваш потік разом з екземпляром LoadOptions, якщо потрібне завантаження з стійкістю до помилок.

Чи підтримує бібліотека завантаження захищених паролем файлів XLSX?

Файли, захищені паролем, не входять до поточної поверхні API. Спроба завантажити такий файл призведе до WorkbookLoadException.

Як перевірити, який лист активний у завантаженій робочій книзі?

Прочитайте Workbook.Worksheets.ActiveSheetName, щоб отримати назву листа, який був останнім активним під час збереження файлу.

Чи можу я одночасно завантажувати кілька файлів XLSX?

Так. Кожен екземпляр Workbook є незалежним. Ви можете створювати кілька об’єктів Workbook у окремих потоках без спільного стану.

Що трапляється, якщо клітинка з формулою завантажується, а кешований результат відсутній?

Cell.StringValue повертає порожній рядок. Cell.Formula все ще повертає рядок формули. Кешоване значення заповнюється лише коли Excel (або сумісна програма) відкриває та зберігає файл.

Див. також

 Українська