用C# XmlWriter创建的XML Excel文档中,如何在单元格中显示多行文本值?

3
情况说明:我正在创建一个C# .Net 4.0 Winform应用程序,用于从Oracle数据库收集数据表格,并使用用户选择的过滤器将它们放入一个Gridview预览中以进行查看。一旦他们按照自己的喜好筛选了数据,他们就会点击导出按钮,将数据表格转换为XML文档,并在双击后在Excel中打开。在XML Excel文件内,每个记录看起来像这样:
  <ss:Row>
    <ss:Cell ss:StyleID="General">
      <ss:Data ss:Type="String">110002</ss:Data>
    </ss:Cell>
    <ss:Cell ss:StyleID="General">
      <ss:Data ss:Type="String">GALV.047M X 3 G90 A653 PASSDRY SQ GR33</ss:Data>
    </ss:Cell>
    <ss:Cell ss:StyleID="General">
      <ss:Data ss:Type="String">.047 MIN X 3 X COIL
!GALV G90 ASTM A 653 SQ GR33 PASS DRY*

20" ID
5 TON MAX LIFT
SKID EYE TO THE SKY
3" X 3" SPACER IN BETWEEN EACH BUNDLE
SUPPLY TEST REPORTS CHEMICAL</ss:Data>
    </ss:Cell>
  </ss:Row>

这个问题涉及IT技术,需要将excel表格中的记录显示为逗号分隔值(CSV)格式,即完全未格式化的工作表,其中所有文本都显示在单行上。显然在XML文件中,换行符得到保留,但是excel表格旨在供用户编辑数据,因此我需要按照接收到的方式显示文本(即如果这是多行文本,则需要显示在多行中)。

问题是:如果XML文件中的数据格式是多行的,如何格式化导出的XML文件以在多行中显示其单元格内容(并可能增加单元格高度以匹配)?


在C#中使用writer.WriteCData()而不是writer.WriteValue()就解决了问题! - Adamantine
1个回答

4
如果您创建一个带有一些多行内容的简单Excel文件并将其保存为XML,您可以在输出中看到以下内容:
在标签中。
<Style ss:ID="s62">
   <Alignment ss:Vertical="Bottom" ss:WrapText="1"/>
</Style>

单元格XML:

<Cell ss:StyleID="s62"> <Data ss:Type="String">第一行&#10;第二行&#10;最后一行</Data> </Cell>

(注:该文本为HTML格式,已保留原样)

所以在我的C#程序中,我会像这样插入我的样式:_writer.WriteStartElement("Styles", "urn:schemas-microsoft-com:office:spreadsheet");WriteExcelStyleElement(CellStyle.General); WriteExcelStyleElement(CellStyle.Number, "General Number"); WriteExcelStyleElement(CellStyle.DateTime, "General Date"); WriteExcelStyleElement(CellStyle.Currency, "Currency"); WriteExcelStyleElement(CellStyle.ShortDate, "Short Date");// 在这里添加你提到的样式_writer.WriteEndElement();我该如何更改以添加你提到的样式? - Adamantine
另外,当我向XML单元格添加行并且有像以下这样的字符串时:Firstline SecondLine lastLine我该如何添加 而不是\n?我有以下代码:ToValid = ToValid.Replace("\n", "\n \n");但结果XML中的&符号会变成&。 - Adamantine
请通过更新您的问题来发布代码:这比在评论中阅读要容易得多。 - Tim Williams
1
我发现我必须使用 ,它是回车符"\r",而不是 ,它是换行符"\n"。 - sethetter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接