Cách tải bảng tính trong .NET
Aspose.Cells FOSS for .NET cho phép bạn mở các bảng tính XLSX hiện có chỉ bằng một lời gọi tới hàm khởi tạo và cung cấp một đường tải chịu lỗi cho các tệp có sự hỏng cấu trúc nhẹ. Cài đặt thư viện từ NuGet bằng 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_FOSSXác nhận gói đã có:
dotnet list package | grep Aspose.Cells_FOSSBước 2: Nhập không gian tên
Thêm chỉ thị này vào đầu tệp C# của bạn:
using Aspose.Cells_FOSS;Bước 3: Tải tệp XLSX
Truyền đường dẫn tệp tới hàm tạo Workbook. Thư viện đọc tệp XLSX và điền vào đối tượng workbook trong bộ nhớ.
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);Bước 4: Tải với các tùy chọn sửa chữa chịu lỗi
Đối với các tệp có thể bị hỏng ZIP hoặc XML, cung cấp một đối tượng LoadOptions với TryRepairPackage và TryRepairXml được đặt thành true. Đặt cuộc gọi trong một try/catch cho WorkbookLoadException trong trường hợp tệp không thể khôi phục.
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);
}Bước 5: Kiểm tra chẩn đoán tải
Sau khi tải, kiểm tra Workbook.LoadDiagnostics để xem thư viện có áp dụng bất kỳ sửa chữa nào không. HasRepairs là true nếu có bất kỳ sửa chữa nào được áp dụng; HasDataLossRisk là true nếu dữ liệu có thể đã bị loại bỏ. Lặp lại Issues để truy cập các bản ghi DiagnosticEntry riêng lẻ.
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.");
}Bước 6: Truy cập dữ liệu Worksheet
Sau khi tải, truy cập các bảng tính bằng chỉ mục hoặc tên, và đọc giá trị ô bằng cách sử dụng Cell.StringValue hoặc 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);Các vấn đề thường gặp và cách khắc phục
WorkbookLoadException được ném ra ngay cả khi bật tùy chọn sửa chữa.
Điều này có nghĩa là cấu trúc ZIP của tệp quá hỏng để các thuật toán sửa chữa có thể khôi phục. Xác minh tệp là một kho lưu trữ ZIP hợp lệ (ví dụ: thử unzip -t file.xlsx). Nếu tệp hoàn toàn bị hỏng, nó không thể được mở bởi bất kỳ thư viện nào.
Sổ làm việc đã tải có ít trang hơn dự kiến.
Một thao tác sửa chữa có thể đã loại bỏ các bảng tính tham chiếu các phần bị thiếu. Kiểm tra LoadDiagnostics.Issues cho các mục có DataLossRisk = true và thông báo cho người dùng.
Giá trị ô trống sau khi tải.
Đảm bảo bạn đang truy cập chỉ mục hoặc tên worksheet đúng. Sử dụng wb.Worksheets.Count để xác nhận số lượng sheet mong đợi. Cũng hãy kiểm tra xem tệp XLSX có được bảo mật bằng mật khẩu không (các tệp được bảo mật bằng mật khẩu hiện không được hỗ trợ).
Workbook constructor bị treo khi tải tệp lớn.
Constructor hoạt động đồng bộ và tải toàn bộ tệp vào bộ nhớ. Đối với các tệp rất lớn, hãy thực hiện việc tải trên một luồng nền để giữ cho giao diện người dùng phản hồi.
DiagnosticEntry.Severity hiển thị Error nhưng HasRepairs là false.
HasRepairs phản ánh việc sửa chữa có được áp dụng thành công hay không, không phải việc lỗi có được phát hiện hay không. Một mục độ nghiêm trọng Error với RepairApplied = false có nghĩa là vấn đề đã được phát hiện nhưng không thể sửa chữa — coi đây là cảnh báo khả năng mất tính toàn vẹn dữ liệu.
Câu hỏi thường gặp
Tôi có thể tải tệp XLSX từ một Stream thay vì từ đường dẫn tệp không?
Có. Trình khởi tạo Workbook có các overload cho phép chấp nhận một đối tượng Stream. Hãy truyền luồng của bạn cùng với một thể hiện LoadOptions nếu cần tải chịu lỗi.
Thư viện có hỗ trợ tải các tệp XLSX được bảo vệ bằng mật khẩu không?
Các tệp được bảo vệ bằng mật khẩu không có trong bề mặt API hiện tại. Cố gắng tải một tệp như vậy sẽ dẫn đến WorkbookLoadException.
Làm sao để kiểm tra sheet nào đang hoạt động trong workbook đã tải?
Đọc Workbook.Worksheets.ActiveSheetName để lấy tên của sheet đã được kích hoạt lần cuối khi tệp được lưu.
Tôi có thể tải đồng thời nhiều tệp XLSX không?
Vâng. Mỗi thể hiện Workbook là độc lập. Bạn có thể tạo ra nhiều đối tượng Workbook trên các luồng riêng biệt mà không có trạng thái chung.
Điều gì sẽ xảy ra nếu một ô công thức được tải và kết quả đã lưu trong bộ nhớ đệm không có?
Cell.StringValue trả về một chuỗi rỗng. Cell.Formula vẫn trả về chuỗi công thức. Giá trị được lưu trong bộ nhớ đệm chỉ được điền khi Excel (hoặc một ứng dụng tương thích) mở và lưu tệp.