OOXML SDK非法字符替换

我在使用MS的Open XML SDK 2.0创建XLSX文档时遇到问题。

我的问题是我需要在Excel工作表中显示一些这些非法字符,但如果我只是将它们添加到工作表中,则不会加载该文档。

我正在使用这个function

private static string ProcessString(string str) { return System.Security.SecurityElement.Escape(str); } 

哪个会给我汤姆的球而不是汤姆的球。 (好吧,我还没弄明白如何获得后者,因为生成的excel不会打开。)

有人知道如何在Excel工作表中使用OOXML显示非法XML字符吗?

编辑:
在我用来创建文本单元格的函数中:

 private static Cell CreateTextCell(string header, UInt32 index, string text) { var c = new Cell { DataType = CellValues.String, CellReference = header + index }; var cellValue = new CellValue(text); c.Append(cellValue); return c; } 

我知道它与非法字符有关,因为当我没有在我的文本中包含特定字段时它起作用,然后当我包含它时,Excel会给我一个解析器错误和一个空白文档。

我处理的文本也恰好有HTML标签。

PS。 大声笑,我只是注意到使用的markdown解析了我的HTML转义让我的例子看起来很荒谬。

编辑2:

输入的一些例子:

  • 癌症的复杂性:我们是否正在考虑错误的水平以发展有效的干​​预措施?

  • 在Kathleen Cuningham基金会研究家族性乳腺癌(kConFab)中,来自BRCA1 或 BRCA2 突变阳性家族的突变阴性妇女的乳腺癌风险的前瞻性研究。

  • 种系 BRCA2 突变与侵袭性前列腺癌和不良结果相关。

html格式基本上是显示在网页上。 我应该删除基本的格式化标签。 但更重要的是,我希望加载excel文件并转义值是一种肯定的方法。

你确定这是造成问题的原因吗? 你可以在单元格中添加“普通”字符串并将其打开吗?

AFAIK撇号字符不是非法的XML字符。

如果您查看第22.9.2.19节中的OOXML规范ST_Xstring(Escaped String)(单元格中字符串的数据类型),您将看到以下说明:

* 22.9.2.19 ST_Xstring(Escaped String)支持转义的无效XML字符的字符串。 对于无法用XML 1.0规范定义的XML表示的所有字符,使用Unicode数字字符表示转义字符格式xHHHH转义字符,其中H表示字符值中的hex字符。 [示例:XML 1.0文档中不允许使用Unicode字符8,因此必须将其转义为x0008 最后的例子] *

考虑一下Excel文件中包含的所有内容最终都以XML格式保存。 因此,如果您希望在文件中保留任何无效的XML字符,则需要将其展开。 它实际上不是OOXML问题 – 它是一个XML问题。

所以,如果你有像这样的输入文字

 种系 BRCA2 突变与侵袭性前列腺癌和不良结果相关。 

您必须将尖括号转换为

 种系< em> BRCA2< / em> 突变与侵袭性前列腺癌和不良后果相关。 

(添加空格以说明括号)

有关执行此操作的几种方法,请参阅字符串转义为XML 。

另外,要查看Microsoft Office如何执行此操作,请将故障文本添加到Excel文档并保存。 然后使用OpenXml SDK工具(随SDK提供)反映文件并查看其完成方式。

另外要注意的事情。 XML没有内置支持我们习惯在HTML中使用的所有字符命名实体。 XML中有少量总是被理解的(即<>&)。 由于OOXML中没有DTD,因此无法定义更多命名实体。 相反,您必须使用字符实体将其他任何内容引入字符串(例如, 用于空格, 用于等等)或者直接在字符串中输入Unicode字符。

你可以使用" for&quote; 和' 对于撇号,如果您需要将其中一个放入由相同类型的引号符号包围的属性值中。

在XML数据流中有一些禁止使用的Unicode代码点。 要将这些代码插入到字符串的值中,OOXML只为这些代码和那些代码提供了自己的转义机制。 我不认为这个条款涉及这个问题。