Как работать с OOXML-пакетами в .NET
Файл XLSX представляет собой ZIP-архив с открытой пакетной конвенцией (OPC). Aspose.Cells FOSS для .NET раскрывает базовую структуру пакета через PackageModel, PackagePartDescriptor, IPackageReader, и IPackageWriter.Это API на уровне инфраструктуры, которые в первую очередь полезны для диагностики и индивидуальных реализаций хранения. dotnet add package Aspose.Cells_FOSS.
Крок за шагом руководство
Шаг 1: Установка упаковки
dotnet add package Aspose.Cells_FOSSШаг 2: Импорт пространства имен
using Aspose.Cells_FOSS;Шаг 3: Управление исключением пакетаStructureException
PackageStructureException выброшен, когда пакет XLSX имеет недействительную структуру OPC (например, отсутствуют необходимые отношения). WorkbookLoadException при загрузке файлов из ненадежных источников.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true };
try
{
var wb = new Workbook("suspect.xlsx", opts);
Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");
}
catch (PackageStructureException ex)
{
Console.WriteLine("OPC structure invalid: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}Шаг 4: Понимание IPackageReader и IPackeWriter
IPackageReader определяет a Read() метод чтения пакета ОПК; IPackageWriter определяет a Write() Метод написания одного. Библиотека предоставляет по умолчанию ZIP-поддерживаемые реализации. Настраиваемые реализации могут быть поставлены при загрузке из или сохранении в не файловое хранилище (например, облачные блоки или буферы в памяти).
// Signature reference
// public interface IPackageReader { void Read(/* ... */); }
// public interface IPackageWriter { void Write(/* ... */); }
//
// Standard usage: pass a Stream to the Workbook constructor
using Aspose.Cells_FOSS;
using System.IO;
byte[] fileBytes = File.ReadAllBytes("data.xlsx");
using var ms = new MemoryStream(fileBytes);
var wb = new Workbook(ms);
Console.WriteLine("Loaded from stream: " + wb.Worksheets.Count + " sheet(s)");Шаг 5: Проверьте отсутствие поддержки.
При загрузке файла XLSX, PackageModel.UnsupportedParts перечисляет части, которые библиотека не обрабатывает. Они сохраняются, но не интерпретируются. Access PackageLoadContext во время заказного потока нагрузки для осмотра модели.
// PackageModel is populated internally during Workbook construction.
// Use LoadDiagnostics to detect load-time structural warnings without
// dropping to the PackageModel level directly.
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("Package had " + diag.Issues.Count() + " repair entries.");Общие проблемы и фиксированные
PackageStructureException бросается даже с TryRepairPackage = true. Некоторые структурные сбои OPC не могут быть автоматически исправлены (например, полностью отсутствует карта типа содержимого). Проверьте, является ли файл действительным ZIP-адресом. unzip -t file.xlsx.Если это верно, он может быть зашифрован файлы с защитой паролем не поддерживаются.
Workbook но некоторые содержимое отсутствует. Check LoadDiagnostics.Issues для: DataLossRisk = true Эти записи указывают на части, которые были выброшены во время ремонта.
Custom IPackageReader Не звонит. Убедитесь, что конструктор перегрузки, которая принимает пользовательский читатель используется. Не все Workbook Конструктор перегрузки принимает пользовательский читатель пакетов.
Часто задаваемые вопросы
Когда мне следует внедрить IPackageReader или IPackewriter?
Только если ваш резервный накопитель не является локальной файловой системой например, загрузка непосредственно из потока облачного хранилища без создания временного файла.
Сохранены ли не поддерживаемые части в PackageModel на сохранении?
Нестандартные детали в UnsupportedParts Для верности нестандартных деталей в обратном направлении, после обработки сохраненный XLSX на уровне ZIP.
В чем разница между PackageStructureException и WorkbookLoadExcept?
PackageStructureException является сбой уровня OPC/ZIP (отсутствие типа контента, нарушение взаимодействия). WorkbookLoadException является сбой более высокого уровня при анализе содержания XLSX XML.