วิธีโหลดสเปรดชีตใน .NET

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

ดูเพิ่มเติม

 ภาษาไทย