【问题标题】:Excel XML Newline in Cell单元格中的 Excel XML 换行符
【发布时间】:2010-05-28 03:22:02
【问题描述】:

我正在使用 LINQ to XML 创建一个Excel XML 文件。我想在单元格中包含换行符。 Excel 使用 
 文字来表示新行。如果我尝试使用 XText 添加它:

XText newlineElement = new XText( "Foo
Bar" );

我明白了:

Foo
Bar

在 Excel 中显示为:

Foo
Bar

有没有办法在不做的情况下将&#10 写入 XML 文件

String.Replace( "
", "
" )

在结果文件文本上?

编辑 这是一段代码 sn-p,显示了我如何为 Excel 文档创建一行。我避免它,因为它有点乱。 :) 让我知道更多代码是否会有所帮助,或者这只会增加更多混乱。

在此示例中,上述newlineElement 由代码示例中唯一的 XText 表示。

const string CELL = "{urn:schemas-microsoft-com:office:spreadsheet}Cell";
const string DATA = "{urn:schemas-microsoft-com:office:spreadsheet}Data";
const string STYLE = "{urn:schemas-microsoft-com:office:spreadsheet}StyleID";
const string TYPE= "{urn:schemas-microsoft-com:office:spreadsheet}Type";   
const string HEIGHT = "{urn:schemas-microsoft-com:office:spreadsheet}Height";
const string ROW = "{urn:schemas-microsoft-com:office:spreadsheet}Row";

...

XElement rowElement = new XElement( Row,
                                    new XElement( CELL,
                                        new XAttribute( STYLE, "s0" ) ),
                                    new XElement( CELL,
                                        new XElement( DATA,
                                            new XText( description.Replace("\n", "
") ), 
                                            new XAttribute( TYPE, "String" ) ),
                                        new XAttribute( STYLE, "sWrap" ) ),
                                    new XElement( CELL,
                                        new XAttribute( STYLE, "s0" ) ),
                                    new XAttribute( HEIGHT, height ) );

这会产生:

  <ss:Row ss:Height="45">
    <ss:Cell ss:StyleID="s0" />
    <ss:Cell ss:StyleID="sWrap">
      <ss:Data ss:Type="String">Foo&amp;#10;Bar</ss:Data>
    </ss:Cell>
    <ss:Cell ss:StyleID="s0" />
  </ss:Row>

感谢您迄今为止的帮助!

【问题讨论】:

  • 信不信由你,这似乎是不可能的。
  • 您能否发布一些示例代码,说明这是如何进入 Excel 文件的?
  • 基本上,在创建 newlineElement 对象后,如果能看到一些代码显示您是如何使用它的,那就太好了。

标签: c# excel linq-to-xml


【解决方案1】:

不确定这是否有帮助,但以下代码:

var newlineElement = new XText("Foo&#10;Bar");
Console.WriteLine(newlineElement);
Console.WriteLine(newlineElement.Value);

产生这个输出:

Foo$amp;#10;Bar

Foo&amp;#10;Bar

那么,在您使用newlineElement 对象的代码中,您可以使用.Value 属性吗?

【讨论】:

    【解决方案2】:

    将实际字符插入字符串而不是转义码 - LINQ 将为您处理转换。

    编辑:

    好的 - 这是完全错误的,但帮助我得到了一些(我认为)有效的东西。如果你想嵌入一些会被 XML 渲染转义的东西,你需要将它嵌入到 CDATA 块中。查看 this related question 上的 C# 和 XML,这让我记忆犹新。

    【讨论】:

    • 我认为你可以使用“\n”来插入内联。
    • 我的立场是正确的——我自己也试过了,同样的结果...多么有趣的刺激!
    • 这部分工作! .xml 文件包含正确的字符;但是,Excel 仍然显示“ ”而不是换行符。 ://
    • 您是否尝试过插入实际的换行符而不是转义码?如果您在 CDATA 块中输入转义码,它将转义转义,如果您遵循 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多