วิธีรับแผ่นงาน 'แผ่นแรก' ใน OOXML ด้วย C # และ SDK

ดังนั้น! :) คำถามง่ายๆ -- อาจมีถามแล้วแต่หาไม่เจอ ฉันกำลังดึงข้อมูลจาก XLSX โดยใช้ Open XML SDK และ C# ฉันต้องการได้แผ่นงาน "แผ่นแรก" (เหมือนแผ่นแรกที่คุณเห็นใน Excel) แต่เมื่อฉันใช้...

WorkbookPart wbPart = workBook.WorkbookPart;
//Now let's find the dimension of the first worksheet 
string sheetArea = wbPart.WorksheetParts.First().Worksheet.SheetDimension.Reference.Value;

น่าเสียดายที่ใน XLSX ใหม่ล่าสุด สิ่งนี้จะดึง "Sheet3" แทนที่จะเป็น "Sheet1" ฉันไม่ทราบชื่อแผ่นงานล่วงหน้า และไม่สามารถบังคับให้ผู้ใช้ส่งสมุดงานที่มีแผ่นงานเพียงแผ่นเดียวหรือระบุชื่อแผ่นงานได้ ข้อกำหนดปัจจุบันของฉันคือการคว้าแผ่นงานแรก

ใครสามารถช่วยได้บ้าง? :)

แก้ไข: ฉันคิดออกแล้ว! แต่ฉันไม่สามารถตอบคำถามตัวเองได้เป็นเวลา 7 ชั่วโมง ดังนั้น...

ฉันพบสิ่งนี้โดยการค้นหาคำตอบของคำถาม SO อื่น ๆ นี้:

Open XML SDK 2.0 - อย่างไร หากต้องการอัปเดตเซลล์ในสเปรดชีต

โดยพื้นฐานแล้ว ตัวอย่างการทำงานอาจเป็นดังนี้:

(wbPart.GetPartById(wbPart.Workbook.Sheets.Elements<Sheet>().First().Id.Value) as WorksheetPart).Worksheet.SheetDimension.Reference.Value

person aikeru    schedule 05.10.2011    source แหล่งที่มา


คำตอบ (1)


เท่าที่ฉันรู้บางอย่างเช่น:

Sheet firstSheet = wbPart.Workbook.Descendants<Sheet>().First();
Worksheet firstWorksheet = ((WorksheetPart)wbPart.GetPartById(firstSheet.Id)).Worksheet;

ควรคืนแผ่นงานแรก ผู้สืบทอดชีตสมุดงานควรเรียงลำดับตามลำดับที่ปรากฏในสมุดงานเสมอ อย่างน้อยก็จากประสบการณ์ของฉัน

หากคุณต้องการให้มองเห็นได้เป็นคนแรก ให้ใช้:

Sheet firstSheet = wbPart.Workbook.Descendants<Sheet>()
                         .First(s => s.State == SheetStateValues.Visible);
person psantiago    schedule 05.10.2011