Làm thế nào để làm việc với OOXML Packaging trong .NET
Một tệp XLSX là một bản lưu trữ ZIP Open Packaging Convention (OPC). Aspose.Cells FOSS for .NET tiết lộ cấu trúc gói dưới đây thông qua PackageModel, PackagePartDescriptor, IPackageReader, và IPackageWriter.Đây là các API cấp cơ sở hạ tầng chủ yếu hữu ích cho chẩn đoán và triển khai lưu trữ tùy chỉnh. dotnet add package Aspose.Cells_FOSS.
Hướng dẫn từng bước
Bước 1: Cài Đặt Gói
dotnet add package Aspose.Cells_FOSSBước 2: nhập tên không gian
using Aspose.Cells_FOSS;Bước 3: Chế độ xử lý PackageStructureException
PackageStructureException được ném khi gói XLSX có cấu trúc OPC không hiệu quả (ví dụ: thiếu các mối quan hệ cần thiết). WorkbookLoadException Khi tải các tập tin từ nguồn không đáng tin cậy.
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);
}Bước 4: Hiểu IPackageReader và IPacketWriter
IPackageReader định nghĩa A Read() Cách đọc gói OPC; IPackageWriter định nghĩa A Write() Phương pháp viết một. Thư viện cung cấp các ứng dụng được hỗ trợ theo mặc định ZIP. ứng xử tùy chỉnh có thể được cung ứng khi tải từ hoặc lưu trữ vào không hệ thống tệp (ví dụ: đám mây blobs hoặc trong bộ nhớ buffers).
// 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)");Bước 5: Kiểm tra các bộ phận không hỗ trợ
Khi tải một tệp XLSX, PackageModel.UnsupportedParts Danh sách các phần mà thư viện không xử lý. Những phần này được bảo tồn nhưng không được giải thích. PackageLoadContext trong một dòng tải tùy chỉnh để kiểm tra mô hình.
// 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.");Các vấn đề chung và Fixes
PackageStructureException Hắn cũng bị ném với TryRepairPackage = true. Một số lỗi cấu trúc của OPC vượt quá sửa chữa tự động (ví dụ: bản đồ kiểu nội dung hoàn toàn thiếu). kiểm tra tệp là một ZIP có hiệu lực với unzip -t file.xlsx.Nếu có hiệu lực, nó có thể được mã hóa – các tệp bảo vệ mật khẩu không được hỗ trợ.
Workbook Mất nhiều nhưng một số nội dung vẫn còn thiếu. Check LoadDiagnostics.Issues Đối với DataLossRisk = true Các bài viết này chỉ ra những bộ phận đã bị mất trong quá trình sửa chữa.
Custom IPackageReader không được gọi. Bảo đảm rằng máy xây dựng quá tải chấp nhận độc giả tùy chỉnh được sử dụng. không phải tất cả Workbook Constructor overload chấp nhận một bộ đọc gói tùy chỉnh.
Thường xuyên hỏi câu hỏi
Khi nào tôi nên triển khai IPackageReader hoặc IPacketWriter?
Chỉ khi nền tảng lưu trữ của bạn không phải là hệ thống tập tin địa phương - ví dụ, tải trực tiếp từ một dòng lưu Trữ đám mây mà không tạo file tạm thời.
Các bộ phận không được hỗ trợ trong PackageModel có được lưu trữ?
Các bộ phận không chuẩn trong UnsupportedParts Đối với độ trung thành vòng tròn của các bộ phận không tiêu chuẩn, sau quá trình lưu XLSX ở mức ZIP.
Sự khác biệt giữa PackageStructureException và WorkbookLoadExcept là gì?
PackageStructureException là một sự thất bại ở mức OPC/ZIP (trong loại nội dung, mối quan hệ bị hỏng). WorkbookLoadException là một thất bại ở cấp cao hơn trong việc phân phối nội dung XML XLSX.