วิธีโหลดสเปรดชีตใน .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 (หรือแอปพลิเคชันที่เข้ากันได้) เปิดและบันทึกไฟล์.