【问题标题】:Custom column width in OpenXML vs MS ExcelOpenXML 与 MS Excel 中的自定义列宽
【发布时间】:2017-09-15 10:19:41
【问题描述】:

我正在使用 OpenXML SDK 创建一个 XLSX 文件,并将自定义列宽指定为 15

using (SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create("Book1.xlsx", SpreadsheetDocumentType.Workbook))
{
    WorkbookPart workbookPart = spreadsheet.AddWorkbookPart();
    workbookPart.Workbook = new Workbook();

    WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
    worksheetPart.Worksheet = new Worksheet();

    spreadsheet.WorkbookPart.Workbook.AppendChild<Sheets>(
        new Sheets(
            new Sheet() { Id = spreadsheet.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" }));

    worksheetPart.Worksheet.Append(
        new Columns(
            new Column() { Min = 1, Max = 1, Width = 15, CustomWidth = true }),
        new SheetData());

    workbookPart.Workbook.Save();
}

但是当我在 MS Excel 中打开生成的“Book1.xlsx”文件并检查列的值时,它显示:

宽度:14.29(105 像素)

另外,当我使用 MS Excel 设置列的值时:

宽度:15(110 像素)

然后使用 OpenXML SDK 读取该值,我得到 ~15.711
问题是为什么,为什么不一样?

【问题讨论】:

  • 我在 SO 中阅读了一些关于此的查询。这似乎是 SDK 中的一个错误。我还没有解决这个问题
  • 您能否将其中一些查询的链接发送给我,以便我查看它们?我找不到它们,我只看到与定义列宽和自动调整相关的帖子。另外我不确定这是 SDK 中的错误还是 MS Excel 中的错误,因为内部 XLSX 文件确实在 (15) 中存储了正确的值,但 MS Excel 显示该值略有增加 (~15.711) .所以,如果有的话,对我来说这似乎是 MS Excel 中的一个错误。

标签: c# excel openxml openxml-sdk


【解决方案1】:

由于 MS Excel 计算列宽时考虑了几个变量(它在加载和更改时这样做),可能会出现差异; Normal 样式的字体设置、机器的 DPI 设置、MS Excel 的标尺单位等

关于 JimSnyder 提供的公式,请注意 MS Excel 的列宽计算与标准指定的计算方式略有不同,请参阅here

【讨论】:

    【解决方案2】:

    这是来自 Vincent Tan 的书SpreadsheetOpenXmlFromScratch

    // This is taken from the documentation for Column.Width in help file for Open XML SDK
    // Truncate([{Number of Characters} * {Maximum Digit Width} + {5 pixel padding}] / {Maximum Digit Width} * 256) / 256
    fTruncWidth = Math.Truncate((sILT.ToCharArray().Count() * fMaxDigitWidth + 5.0) / fMaxDigitWidth * 256.0) / 256.0;
    

    公式应该为您提供所需的宽度。至于为什么不同,我最好的猜测是将字体点转换为窗口像素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多