使用电子表格管理
使用电子表格管理
Workbook 类是 Aspose.Cells FOSS for .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 | XLSX 中的 ZIP 或 XML 损坏 | 设置 LoadOptions.TryRepairPackage = true 和 TryRepairXml = true |
Add(name) 返回错误的索引 | 使用工作表名称作为索引 | Add() 返回整数索引;使用该索引访问新工作表 |
| 行高未持久化 | 高度设置为 0 或负值 | 使用正的 double 值,例如 28d |
| 合并单元格显示错误的值 | 值写入了合并范围内非左上角的单元格 | 在调用 Cells.Merge() 之前,将值写入左上角单元格 |
| 分页符未出现 | AddHorizontalPageBreak 在 Save() 之后被调用 | 在调用 Save() 之前设置分页符 |
FAQ
我可以添加多少个工作表?
XLSX 格式每个工作簿最多支持 1024 张工作表。实际限制取决于可用内存和文件大小。
我可以在工作簿之间复制工作表吗?
当前的 API 接口未提供用于跨工作簿复制工作表的 CopyTo 方法。请加载两个文件并逐单元格传输数据。
我该如何重新排列工作表?
使用 WorksheetCollection 索引访问并重命名工作表以更改其逻辑顺序。直接的位移操作在当前的 API 接口中不可用。
PageSetup 使用什么单位来表示页边距?
所有页边距属性(LeftMarginInch、TopMarginInch 等)均以英寸为单位,作为 double 值。
Cells.Merge 会替换已有的单元格数据吗?
左上角单元格的值被保留;其他合并单元格中的值被清除。
API Reference 摘要
| 类 / 方法 | 描述 |
|---|---|
Workbook | 根对象 — 创建、加载、保存工作簿 |
Workbook.Worksheets | 返回 WorksheetCollection |
Workbook.Save(path) | 持久化工作簿为 XLSX |
WorksheetCollection.Add(name) | 按名称追加新工作表 |
WorksheetCollection.ActiveSheetName | 打开文件时的活动标签页 |
Worksheet.VisibilityType | VisibilityType.Hidden or Visible |
Worksheet.TabColor | 标签颜色(Color) |
Worksheet.PageSetup | 打印布局设置 |
PageSetup.Orientation | PageOrientationType.Landscape or Portrait |
PageSetup.PaperSize | PaperSizeType.PaperA4, etc. |
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 | 当文件不可恢复时抛出 |