ทำงานกับการจัดการสเปรดชีต

ทำงานกับการจัดการสเปรดชีต

ทำงานกับการจัดการสเปรดชีต

คลาส Workbook คืออ็อบเจ็กต์รากสำหรับการดำเนินการสเปรดชีตทั้งหมดใน Aspose.Cells FOSS สำหรับ .NET. มันให้การเข้าถึง WorksheetCollection, ชื่อที่กำหนด, และวงจรการบันทึก/โหลด. คู่มือนี้ครอบคลุมการโหลดที่ทนต่อข้อผิดพลาด, การจัดระเบียบแผ่นงาน, การกำหนดค่าเลย์เอาต์การพิมพ์, และการควบคุมการจัดวางแถว/คอลัมน์/เซลล์.


การโหลดเวิร์กบุ๊กพร้อมตัวเลือกการซ่อมแซม

ส่งพาธของไฟล์ไปยังคอนสตรัคเตอร์ของ Workbook เพื่อโหลดไฟล์ XLSX ที่มีอยู่. ให้วัตถุ LoadOptions พร้อมกับ TryRepairPackage และ TryRepairXml ตั้งค่าเป็น true เพื่อพยายามกู้คืนไฟล์ที่มีความเสียหายโครงสร้างเล็กน้อย. WorkbookLoadException จะถูกโยนเมื่อไฟล์ไม่สามารถกู้คืนได้.

using Aspose.Cells_FOSS;

var options = new LoadOptions
{
    TryRepairPackage = true,
    TryRepairXml = true,
};

try
{
    var wb = new Workbook("data.xlsx", options);
    Console.WriteLine("Sheets: " + wb.Worksheets.Count);
    Console.WriteLine("Cell A1: " + wb.Worksheets[0].Cells["A1"].StringValue);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Unrecoverable: " + ex.Message);
}

การเพิ่มและจัดระเบียบแผ่นงาน

Workbook.Worksheets ส่งคืน WorksheetCollection. เรียก Add(name) เพื่อเพิ่มแผ่นงานใหม่โดยใช้ชื่อ; เมธอดจะส่งคืนดัชนีของแผ่นงานใหม่. เข้าถึงแผ่นงานโดยดัชนีเริ่มจากศูนย์หรือโดยชื่อ. ตั้งค่า WorksheetCollection.ActiveSheetName เพื่อควบคุมว่าตา็บใดจะเป็นแอคทีฟเมื่อไฟล์เปิด.

using Aspose.Cells_FOSS;

var wb = new Workbook();

// Rename the default sheet
wb.Worksheets[0].Name = "Summary";

// Add sheets
var dataIdx = wb.Worksheets.Add("Data");
var archiveIdx = wb.Worksheets.Add("Archive");

// Set active sheet
wb.Worksheets.ActiveSheetName = "Data";

// Write to sheets by name
wb.Worksheets["Summary"].Cells["A1"].PutValue("Overview total");
wb.Worksheets["Data"].Cells["A1"].PutValue("Raw rows start here");

wb.Save("organised.xlsx");

// Verify
var loaded = new Workbook("organised.xlsx");
Console.WriteLine("Active: " + loaded.Worksheets.ActiveSheetName);
Console.WriteLine("Sheet count: " + loaded.Worksheets.Count);

การซ่อนและแสดงแผ่นงาน

ตั้งค่า Worksheet.VisibilityType เป็น VisibilityType.Hidden เพื่อซ่อนแผ่นงานโดยไม่ลบ แผ่นงานที่ซ่อนจะยังคงอยู่ในไฟล์ XLSX และสามารถทำให้มองเห็นได้โดยการตั้งค่า VisibilityType.Visible สีแท็บตั้งค่าผ่าน Worksheet.TabColor.

using Aspose.Cells_FOSS;

var wb = new Workbook();
wb.Worksheets[0].Name = "Visible";
var hiddenIdx = wb.Worksheets.Add("Internal");
var hiddenSheet = wb.Worksheets[hiddenIdx];

hiddenSheet.VisibilityType = VisibilityType.Hidden;
hiddenSheet.Cells["A1"].PutValue("Internal data");

wb.Worksheets["Visible"].TabColor = Color.FromArgb(255, 70, 130, 180);

wb.Save("hidden.xlsx");

การกำหนดค่าการตั้งหน้ากระดาษ

Worksheet.PageSetup เปิดเผยคุณสมบัติทั้งหมดที่เกี่ยวกับการพิมพ์ ใช้ PageOrientationType เพื่อสลับระหว่างแนวตั้งและแนวนอน ใช้ PaperSizeType เพื่อเลือกขนาดกระดาษ กำหนดพื้นที่พิมพ์ด้วย PrintArea ตั้งค่าการทำซ้ำแถว/คอลัมน์ด้วย PrintTitleRows/PrintTitleColumns และเพิ่มการแบ่งหน้าที่กำหนดเองด้วย AddHorizontalPageBreak และ AddVerticalPageBreak.

using Aspose.Cells_FOSS;

var wb = new Workbook();
var ws = wb.Worksheets[0];

// Sample data
for (var r = 0; r < 60; r++)
    ws.Cells[r, 0].PutValue("Row " + (r + 1));

var ps = ws.PageSetup;
ps.Orientation = PageOrientationType.Landscape;
ps.PaperSize = PaperSizeType.PaperA4;
ps.LeftMarginInch = 0.5d;
ps.RightMarginInch = 0.5d;
ps.TopMarginInch = 0.75d;
ps.BottomMarginInch = 0.75d;
ps.PrintArea = "$A$1:$H$60";
ps.PrintTitleRows = "$1:$1";
ps.CenterHeader = "Sales Report";
ps.LeftFooter = "Confidential";
ps.RightFooter = "Page &P of &N";
ps.PrintGridlines = true;
ps.CenterHorizontally = true;
ps.AddHorizontalPageBreak(30);

wb.Save("paged.xlsx");

var loaded = new Workbook("paged.xlsx");
Console.WriteLine("Orientation: " + loaded.Worksheets[0].PageSetup.Orientation);
Console.WriteLine("Print area: " + loaded.Worksheets[0].PageSetup.PrintArea);

การปรับขนาดแถวและคอลัมน์

เข้าถึง Worksheet.Cells.Rows ตามดัชนีเพื่อรับอ็อบเจ็กต์ Row ตั้งค่า Row.Height (เป็นจุด) เพื่อควบคุมความสูงของแถว ตั้งค่า Row.IsHidden เป็น true เพื่อซ่อนแถว เข้าถึง Worksheet.Cells.Columns ตามดัชนีเพื่อรับอ็อบเจ็กต์ Column ตั้งค่า Column.Width (เป็นหน่วยอักขระ) และ Column.IsHidden.

using Aspose.Cells_FOSS;

var wb = new Workbook();
var ws = wb.Worksheets[0];

// Populate data
for (var r = 0; r < 5; r++)
    for (var c = 0; c < 4; c++)
        ws.Cells[r, c].PutValue($"R{r + 1}C{c + 1}");

// Row height and visibility
ws.Cells.Rows[0].Height = 28d;   // Header taller
ws.Cells.Rows[3].IsHidden = true; // Hide row 4

// Column width and visibility
ws.Cells.Columns[0].Width = 22d;
ws.Cells.Columns[3].IsHidden = true;

wb.Save("layout.xlsx");

var loaded = new Workbook("layout.xlsx");
Console.WriteLine("Row 0 height: " + loaded.Worksheets[0].Cells.Rows[0].Height);
Console.WriteLine("Col 0 width: " + loaded.Worksheets[0].Cells.Columns[0].Width);

การรวมเซลล์

เรียกใช้ Worksheet.Cells.Merge(firstRow, firstColumn, totalRows, totalColumns) เพื่อรวมบล็อกสี่เหลี่ยมต่อเนื่องให้เป็นเซลล์เดียว เซลล์ที่รวมจะสืบทอดค่าจากเซลล์มุมบนซ้าย ใช้ Worksheet.Cells.MergedCells เพื่ออ่านกลับทุกช่วงที่รวมในเวิร์กบุ๊กที่โหลดอยู่.

using Aspose.Cells_FOSS;

var wb = new Workbook();
var ws = wb.Worksheets[0];

// Title spanning A1:D1
ws.Cells["A1"].PutValue("Quarterly Sales Report");
ws.Cells.Merge(0, 0, 1, 4);

// Section header spanning A3:D3
ws.Cells["A3"].PutValue("Region: North");
ws.Cells.Merge(2, 0, 1, 4);

// Column headers
ws.Cells["A4"].PutValue("Product"); ws.Cells["B4"].PutValue("Q1");
ws.Cells["C4"].PutValue("Q2");      ws.Cells["D4"].PutValue("Q3");

wb.Save("report.xlsx");

var loaded = new Workbook("report.xlsx");
Console.WriteLine("Merged regions: " + loaded.Worksheets[0].Cells.MergedCells.Count);

เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด

  • ใช้ WorksheetCollection.ActiveSheetName เพื่อให้แน่ใจว่าแท็บที่ถูกต้องถูกเลือกเมื่อไฟล์เปิดใน Excel.
  • ตั้งค่าขอบหน้าด้วยหน่วยนิ้ว (LeftMarginInch, TopMarginInch) — ค่านี้เป็นค่าจุดทศนิยม ไม่ใช่จำนวนเต็ม.
  • การซ่อนแถว/คอลัมน์ (IsHidden = true) จะคงข้อมูลไว้; การลบแถวจะทำให้ข้อมูลหายอย่างถาวร.
  • ควรเรียกใช้ Workbook.Save() เพียงครั้งเดียวที่ตอนท้ายของการดำเนินการเป็นชุด แทนการเรียกหลังการเปลี่ยนแปลงแต่ละครั้ง.
  • ควรใช้การรวมเซลล์อย่างจำกัดในแผ่นข้อมูล — พื้นที่ที่รวมกันจะทำให้การจัดเรียงและตัวกรองอัตโนมัติทำงานไม่ถูกต้องในพื้นที่ที่รวม.

ปัญหาทั่วไป

ปัญหาสาเหตุวิธีแก้ไข
WorkbookLoadException เมื่อโหลดไฟล์ ZIP หรือ XML ใน XLSX เสียหายตั้งค่า LoadOptions.TryRepairPackage = true และ TryRepairXml = true
Add(name) คืนค่าดัชนีผิดใช้ชื่อแผ่นงานเป็นดัชนีAdd() คืนค่าดัชนีแบบจำนวนเต็ม; ใช้ดัชนีนั้นเพื่อเข้าถึงแผ่นงานใหม่
ความสูงของแถวไม่ถูกบันทึกไว้ความสูงถูกตั้งค่าเป็น 0 หรือค่าเป็นลบใช้ค่าตัวเลขทศนิยมบวก เช่น 28d
เซลล์ที่รวมแสดงค่าผิดค่าถูกเขียนลงในเซลล์ที่ไม่ได้อยู่มุมซ้ายบนของช่วงที่รวมเขียนค่าลงในเซลล์มุมซ้ายบนก่อนเรียก Cells.Merge()
การแบ่งหน้าไม่ปรากฏAddHorizontalPageBreak ถูกเรียกหลังจาก Save()ตั้งค่าการแบ่งหน้า ก่อนเรียก Save()

FAQ

ฉันสามารถเพิ่ม Worksheet ได้กี่แผ่น?

รูปแบบ XLSX รองรับได้สูงสุด 1024 แผ่นงานต่อเวิร์กบุ๊ก ขีดจำกัดเชิงปฏิบัติก็ขึ้นอยู่กับหน่วยความจำที่มีและขนาดไฟล์.

ฉันสามารถคัดลอก worksheet ระหว่าง workbooks ได้หรือไม่?

พื้นผิว API ปัจจุบันไม่ได้เปิดให้ใช้วิธี CopyTo สำหรับการคัดลอกแผ่นงานข้ามเวิร์กบุ๊ก โหลดไฟล์ทั้งสองแล้วถ่ายโอนข้อมูลเซลล์ต่อเซลล์.

ฉันจะจัดลำดับ worksheet ใหม่อย่างไร?

ใช้การเข้าถึงโดยดัชนี WorksheetCollection และเปลี่ยนชื่อแผ่นงานเพื่อปรับลำดับเชิงตรรกะ การย้ายตำแหน่งโดยตรงไม่ได้อยู่ในพื้นผิว API ปัจจุบัน.

หน่วยที่ PageSetup ใช้สำหรับขอบคืออะไร?

คุณสมบัติขอบทั้งหมด (LeftMarginInch, TopMarginInch, เป็นต้น) มีหน่วยเป็นนิ้วเป็นค่าของ double.

Cells.Merge แทนที่ข้อมูลเซลล์ที่มีอยู่หรือไม่?

ค่าของเซลล์มุมซ้ายบนจะถูกเก็บไว้; ค่าของเซลล์ที่รวมกันอื่น ๆ จะถูกลบออก.


API Reference สรุป

คลาส / เมธอดคำอธิบาย
Workbookอ็อบเจกต์ราก — สร้าง, โหลด, บันทึกเวิร์กบุ๊ก
Workbook.Worksheetsส่งคืน WorksheetCollection
Workbook.Save(path)บันทึกเวิร์กบุ๊กเป็น XLSX
WorksheetCollection.Add(name)เพิ่มแผ่นงานใหม่ตามชื่อ
WorksheetCollection.ActiveSheetNameแท็บที่เปิดใช้งานเมื่อเปิดไฟล์
Worksheet.VisibilityTypeVisibilityType.Hidden or Visible
Worksheet.TabColorสีแท็บ (Color)
Worksheet.PageSetupการตั้งค่าเค้าโครงการพิมพ์
PageSetup.OrientationPageOrientationType.Landscape หรือ Portrait
PageSetup.PaperSizePaperSizeType.PaperA4, ฯลฯ.
PageSetup.AddHorizontalPageBreak(row)แทรกการตัดหน้าตั้งแนวนอน
Cells.Rows[index].Heightความสูงของแถวเป็นหน่วยจุด
Cells.Rows[index].IsHiddenซ่อน/แสดงแถว
Cells.Columns[index].Widthความกว้างของคอลัมน์เป็นหน่วยอักขระ
Cells.Columns[index].IsHiddenซ่อน/แสดงคอลัมน์
Cells.Merge(row, col, numRows, numCols)รวมบล็อกสี่เหลี่ยมผืนผ้า
Cells.MergedCellsรายการของช่วงที่รวมไว้ในแผ่นงาน
LoadOptions.TryRepairPackageพยายามซ่อมแซม ZIP ขณะโหลด
LoadOptions.TryRepairXmlพยายามซ่อมแซม XML ขณะโหลด
WorkbookLoadExceptionถูกโยนออกเมื่อไฟล์ไม่สามารถกู้คืนได้

ดูเพิ่มเติม

 ภาษาไทย