在 OfficeOpenXml 中禁用关于 Excel 包含数值的文本单元格的警告

Disable warning about Excel text cell containing numeric value in OfficeOpenXml

我正在使用 OfficeOpenXml 创建一个 MS/Excel 电子表格文件。一些列包含任意文本值。但是,当这些列中的单元格填充有数值(即,仅包含数字的文本值)时,Excel 会在这些单元格的角落显示一个绿色小三角形,并显示 "The number in this cell is formatted as text or preceded by an apostrophe".

这在技术上是正确的,但我不想 Excel 显示警告。

那么如何将这些列或这些列中的单元格格式化为严格的文本值,以便它们不会被标记为数字文本值?如何禁用警告,并强制 Excel 接受这些单元格值作为文本(仅)?

注意:我看过其他 OpenXML 包的解决方案,但 none 专门针对 OfficeOpenXml。我还看到了将文本单元格值解释为数字的解决方案,但这与我想要做的完全相反。

我一直在寻找相同的答案,我认为这会让你接近。 在 SheetData 部分之后,您需要创建一个带有 IgnoredError 元素的 IgnoredErrors 部分。你可以做一个范围,例如:

<ignoredErrors>
    <ignoredError numberStoredAsText="1" sqref="G2:G10"/>
</ignoredErrors>

您可以创建多个元素,也可以跨越其他类型的字段。 就我而言,我使用了 "A1:{LastCell}" 范围并且它起作用了。

我通过创建 "bad" xlsx 文档,进入 excel 并标记要忽略的范围并保存为副本来解决这个问题。然后我使用 Open XML 2.5 生产力工具比较文件来查看差异。没过多久就找到了 ignorederrors 部分并从那里开始。

在 C# 中使用 DocumentFormat.OpenXml 代码将如下所示。

// Append sheetData to worksheet
worksheet.Append(sheetData);

// Ignoring errors for parsing
IgnoredErrors errors = new IgnoredErrors();
errors.AddChild(new IgnoredError() { NumberStoredAsText = true, SequenceOfReferences = new ListValue<StringValue>() { InnerText = "A:Z" } });

// of type Worksheet
worksheet.Append(errors);

另一个解决方案是我们 LoadFromText,它填充单元格文本并且似乎抑制单元格的 'numeric text' 警告。所以我使用这样的代码来填充有这个问题的单元格:

DataRow dr = ...;    // Query result row
...
cell[r, c].LoadFromText(Convert.ToString(dr["item"]));