使用核心工作簿设置

使用核心工作簿设置

使用核心工作簿设置

超出工作表网格,工作簿包含影响 Excel 解释方式的元数据和配置:日期系统、文档作者、区域设置以及是否存储恢复信息。Workbook 类通过 Workbook.SettingsWorkbook.PropertiesWorkbook.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 返回一个带有面向显示的标志(如 ShowObjectsFilterPrivacy)的 WorkbookProperties 对象。对于作者信息和描述性元数据,请使用 Workbook.DocumentProperties,它将 TitleSubjectAuthorKeywordsCommentsCategoryCompanyManager 直接暴露为字符串属性。

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.HasRepairstrue。如果修复导致数据被丢弃,LoadDiagnostics.HasDataLossRisktrue。遍历 LoadDiagnostics.Issues 以使用 CodeSeverityMessageRepairAppliedDataLossRisk 访问各个 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.AuthorCompany ——它们会显示在 Excel 的文件信息面板中。
  • UseSharedStrings = true 对于包含许多重复字符串值的工作表(例如状态列)有益;对以数字为主的工作表影响很小。
  • Date1904 必须在源文件和目标文件之间保持一致,以避免在工作簿之间复制单元格时出现日期值漂移。

常见问题

问题原因修复
LoadDiagnostics.Issues 在修复后为空不需要修复或 TryRepair* 未设置LoadOptions 中设置 TryRepairPackage = trueTryRepairXml = true
DocumentProperties.Title 未持久化使用 WorkbookProperties 而不是 DocumentProperties通过 Workbook.DocumentProperties 访问字符串元数据,而不是 Workbook.Properties
WorkbookSaveException 在保存时使用 ValidateBeforeSave = true 时验证失败检查异常信息;禁用验证以隔离错误数据

FAQ

WorkbookPropertiesDocumentProperties 有什么区别?

WorkbookProperties(via Workbook.Properties)保存 OOXML 显示标志(例如 ShowObjects)。DocumentProperties(via Workbook.DocumentProperties)保存 Dublin-Core 风格的元数据字符串:标题、作者、公司等。

CompactStyles 会删除我需要的样式吗?

CompactStyles 仅移除未被任何单元格、条件格式或命名样式引用的样式。正在使用的样式永不被删除。

即使未尝试修复,我还能读取 LoadDiagnostics 吗?

是的。当未尝试修复时,Issues 集合为空,HasRepairsHasDataLossRisk 都返回 false


API Reference 摘要

类 / 属性描述
Workbook.Settings返回 WorkbookSettings
WorkbookSettings.Date1904使用 1904 日期系统
WorkbookSettings.Culture用于数字/日期解析的语言环境
Workbook.DocumentProperties作者、标题、公司元数据
Workbook.LoadDiagnostics加载后修复报告
LoadDiagnostics.HasRepairstrue 如果已应用任何修复
LoadDiagnostics.HasDataLossRisktrue 如果修复丢弃了数据
LoadDiagnostics.IssuesDiagnosticEntry 对象的集合
DiagnosticEntry.Code短修复代码字符串
DiagnosticEntry.SeverityDiagnosticSeverity 枚举值
DiagnosticEntry.Message人类可读的修复描述
SaveOptions.UseSharedStrings将字符串存储在共享字符串表中
SaveOptions.ValidateBeforeSave写入前运行内部验证
SaveOptions.CompactStyles移除未使用的样式

另请参阅

 中文