I am using LINQ to XML to create an Excel XML file . I want to include new rows in cells. Excel uses the literal to represent a new line. If I try to add this using XText:
XText newlineElement = new XText( "Foo Bar" );
I get:
Foo
Bar
What is displayed in Excel as:
Foo Bar
Is there any way to write
to an XML file without doing
String.Replace( "
", " " )
by the resulting text file?
EDIT Here is a code snippet showing how I create a line for an Excel document. I avoided this as it is a bit dirty. :) Let me know if more code helps, or if it just adds more confusion.
In this example, the newlineElement described above newlineElement represented by a single XText in the sample code.
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 ) );
This gives:
<ss:Row ss:Height="45"> <ss:Cell ss:StyleID="s0" /> <ss:Cell ss:StyleID="sWrap"> <ss:Data ss:Type="String">Foo&#10;Bar</ss:Data> </ss:Cell> <ss:Cell ss:StyleID="s0" /> </ss:Row>
Thanks for the help so far!