Как загрузить электронную таблицу в .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 (или совместимое приложение) открывает и сохраняет файл.