2010-05-26 16 views
7

Estoy usando LINQ to XML para crear un archivo Excel XML. Quiero incluir nuevas líneas dentro de las celdas. Excel utiliza el literal 
 para representar una nueva línea. Si trato de agregar esta usando un xtext:Excel XML Newline en la Celda

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

me sale:

Foo
Bar

que se muestra en Excel como:

Foo
Bar

¿Hay una manera de escriba &#10 en el archivo XML sin hacer un

String.Replace("
", "
") 

sobre el texto del archivo resultante?

EDIT Aquí hay un fragmento de código que muestra cómo creo una fila para el documento de Excel. Lo estaba evitando porque es un poco desordenado. :) Avíseme si más código ayudaría, o si esto solo agrega más confusión.

En este ejemplo, el newlineElement descrito anteriormente está representado por el único XText en el ejemplo de código.

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)); 

Esto produce:

<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> 

Gracias por la ayuda hasta el momento!

+0

Lo creas o no, esto no parece posible. – SLaks

+0

¿Podría publicar algún código de ejemplo de cómo se está incorporando en el archivo de Excel? – CoderDennis

+0

Básicamente, sería bueno ver algún código que muestre cómo está utilizando el objeto newlineElement después de crearlo. – CoderDennis

Respuesta

1

inserte el carácter real en la cadena en lugar del código de escape - LINQ se encargará de la conversión por usted.

EDIT:

Ok - esto era completamente equivocado, pero me ayudó a conseguir algo, que (creo) funciona. Si desea incrustar algo que de otra manera se escaparía mediante la representación XML, debe incrustarlo en un bloque CDATA. Echa un vistazo a this related question en C# y XML que disparó mi memoria.

+0

No creo que sea así. – SLaks

+0

Creo que puede usar "\ n" para insertar en línea. –

+0

No lo hará. Lo intenté. – SLaks

1

No estoy seguro si esto ayuda, pero el siguiente código:

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

Produce esta salida:

Foo$amp;#10;Bar

Foo&#10;Bar

Por lo tanto, en el código que está utilizando el newlineElement objeto, ¿podría usar la propiedad .Value?

Cuestiones relacionadas