使用核心工作簿设置
使用核心工作簿设置
超出工作表网格,工作簿包含影响 Excel 解释方式的元数据和配置:日期系统、文档作者、区域设置以及是否存储恢复信息。Workbook 类通过 Workbook.Settings、Workbook.Properties 和 Workbook.LoadDiagnostics 暴露这些信息。保存行为由 SaveOptions 控制。
工作簿设置
Workbook.Settings 返回一个 WorkbookSettings 对象。将 Date1904 设置为 true 以使用 1904 日期系统(在来源于 macOS Excel 的文件中常见)。将 Culture 设置为 CultureInfo 实例以控制数字和日期解析的区域设置。
using Aspose.Cells_FOSS;
using System.Globalization;
var wb = new Workbook();
// Use 1904 date system
wb.Settings.Date1904 = true;
// Set culture for number/date formatting
wb.Settings.Culture = new CultureInfo("en-US");
wb.Worksheets[0].Cells["A1"].PutValue("Settings applied");
wb.Save("settings.xlsx");
var loaded = new Workbook("settings.xlsx");
Console.WriteLine("Date1904: " + loaded.Settings.Date1904);文档属性
Workbook.Properties 返回一个带有面向显示的标志(如 ShowObjects 和 FilterPrivacy)的 WorkbookProperties 对象。对于作者信息和描述性元数据,请使用 Workbook.DocumentProperties,它将 Title、Subject、Author、Keywords、Comments、Category、Company 和 Manager 直接暴露为字符串属性。
using Aspose.Cells_FOSS;
var wb = new Workbook();
var doc = wb.DocumentProperties;
doc.Title = "Quarterly Report";
doc.Subject = "Sales Data";
doc.Author = "Reporting Team";
doc.Company = "Contoso Ltd";
doc.Keywords = "sales, quarterly, 2026";
doc.Comments = "Generated by automated pipeline";
wb.Worksheets[0].Cells["A1"].PutValue("See document properties");
wb.Save("properties.xlsx");
var loaded = new Workbook("properties.xlsx");
Console.WriteLine("Title: " + loaded.DocumentProperties.Title);
Console.WriteLine("Author: " + loaded.DocumentProperties.Author);加载诊断
加载工作簿后,检查 Workbook.LoadDiagnostics 以了解库是否进行了任何修复。如果至少进行了一次结构修复,LoadDiagnostics.HasRepairs 为 true。如果修复导致数据被丢弃,LoadDiagnostics.HasDataLossRisk 为 true。遍历 LoadDiagnostics.Issues 以使用 Code、Severity、Message、RepairApplied 和 DataLossRisk 访问各个 DiagnosticEntry 对象。
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true, TryRepairXml = true };
try
{
var wb = new Workbook("possibly-corrupt.xlsx", opts);
var diag = wb.LoadDiagnostics;
if (diag.HasRepairs)
{
Console.WriteLine("Repairs applied: " + diag.HasRepairs);
Console.WriteLine("Data loss risk: " + diag.HasDataLossRisk);
foreach (var entry in diag.Issues)
{
Console.WriteLine($" [{entry.Severity}] {entry.Code}: {entry.Message}");
Console.WriteLine($" RepairApplied={entry.RepairApplied}, DataLossRisk={entry.DataLossRisk}");
}
}
else
{
Console.WriteLine("File loaded cleanly.");
}
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Unrecoverable: " + ex.Message);
}保存选项
Workbook.Save(path, SaveOptions) 接受一个 SaveOptions 对象来自定义保存输出。UseSharedStrings 控制是否将字符串值存储在共享字符串表中(可减少包含大量重复字符串的工作表的文件大小)。ValidateBeforeSave 在写入之前运行内部工作簿验证。CompactStyles 删除未使用的样式。PreserveRecoveryMetadata 控制是否保留 Office 恢复元数据。
using Aspose.Cells_FOSS;
var wb = new Workbook();
var ws = wb.Worksheets[0];
for (var i = 0; i < 100; i++)
ws.Cells[i, 0].PutValue("Repeated string value");
var opts = new SaveOptions
{
UseSharedStrings = true,
ValidateBeforeSave = true,
CompactStyles = true,
PreserveRecoveryMetadata = false,
};
wb.Save("compact.xlsx", opts);
Console.WriteLine("Saved with SaveOptions.");提示与最佳实践
- 在加载已修复的文件后检查
LoadDiagnostics.HasDataLossRisk,并在可能已丢失数据时警告用户。 - 为与最终用户共享的文件设置
DocumentProperties.Author和Company——它们会显示在 Excel 的文件信息面板中。 UseSharedStrings = true对于包含许多重复字符串值的工作表(例如状态列)有益;对以数字为主的工作表影响很小。Date1904必须在源文件和目标文件之间保持一致,以避免在工作簿之间复制单元格时出现日期值漂移。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
LoadDiagnostics.Issues 在修复后为空 | 不需要修复或 TryRepair* 未设置 | 在 LoadOptions 中设置 TryRepairPackage = true 和 TryRepairXml = true |
DocumentProperties.Title 未持久化 | 使用 WorkbookProperties 而不是 DocumentProperties | 通过 Workbook.DocumentProperties 访问字符串元数据,而不是 Workbook.Properties |
WorkbookSaveException 在保存时 | 使用 ValidateBeforeSave = true 时验证失败 | 检查异常信息;禁用验证以隔离错误数据 |
FAQ
WorkbookProperties 和 DocumentProperties 有什么区别?
WorkbookProperties(via Workbook.Properties)保存 OOXML 显示标志(例如 ShowObjects)。DocumentProperties(via Workbook.DocumentProperties)保存 Dublin-Core 风格的元数据字符串:标题、作者、公司等。
CompactStyles 会删除我需要的样式吗?
CompactStyles 仅移除未被任何单元格、条件格式或命名样式引用的样式。正在使用的样式永不被删除。
即使未尝试修复,我还能读取 LoadDiagnostics 吗?
是的。当未尝试修复时,Issues 集合为空,HasRepairs 和 HasDataLossRisk 都返回 false。
API Reference 摘要
| 类 / 属性 | 描述 |
|---|---|
Workbook.Settings | 返回 WorkbookSettings |
WorkbookSettings.Date1904 | 使用 1904 日期系统 |
WorkbookSettings.Culture | 用于数字/日期解析的语言环境 |
Workbook.DocumentProperties | 作者、标题、公司元数据 |
Workbook.LoadDiagnostics | 加载后修复报告 |
LoadDiagnostics.HasRepairs | true 如果已应用任何修复 |
LoadDiagnostics.HasDataLossRisk | true 如果修复丢弃了数据 |
LoadDiagnostics.Issues | DiagnosticEntry 对象的集合 |
DiagnosticEntry.Code | 短修复代码字符串 |
DiagnosticEntry.Severity | DiagnosticSeverity 枚举值 |
DiagnosticEntry.Message | 人类可读的修复描述 |
SaveOptions.UseSharedStrings | 将字符串存储在共享字符串表中 |
SaveOptions.ValidateBeforeSave | 写入前运行内部验证 |
SaveOptions.CompactStyles | 移除未使用的样式 |