2009-05-08 7 views
0

J'essaie d'obtenir la chaîne suivante à afficher dans une cellule dans Excel en utilisant les fonctionnalités XML 2003 "Cheese \ nBread" et pour le moment il ignore le saut de ligne.Flux de ligne XML Excel dans les champs

Si je crée un fichier avec l'effet désiré puis-je obtenir la sortie suivante

<Cell ss:StyleID="s62"><Data ss:Type="String">Cheese&#10;Monkey</Data></Cell> 

Ok, donc j'essayer de faire ...

text.Replace('\n',(char)10); 

ou text.Replace ("\ n "," ");

En vain, le premier ne fait rien d'utile et dans la seconde le XmlWriter s'échappe simplement avec un & ce qui est vraiment utile.

Des idées, peut-être un paramètre sur le .NET XmlWriter?

Répondre

1

Essayez le réglage xml:space="preserve" sur l'élément Data:

<Cell ss:StyleID="s62"><Data ss:Type="String" xml:space="preserve">Cheese 
Monkey</Data></Cell> 
+0

hmm sur le deuxième aspect cela ne fonctionne pas pour moi (les mots enveloppés simplement en raison de la taille de la colonne qui C'est pourquoi je pensais que cela fonctionnait) –

+0

Dans ce cas, votre version Excel ne gère pas correctement le XML, et vous devrez peut-être faire un post-traitement du texte XML, par exemple avec un Regex, ou en créant votre propre dérivé XmlTextWriter lorsque WriteString est invoqué lorsque l'auteur est sur une balise Data. – Lucero

+0

merci, je vais essayer –

2

je dû ajouter ce qui suit à ma définition XML (dans l'élément "Cahier"):

<Styles> 
    <Style ss:ID="sMultiLine"> 
    <Alignment ss:Vertical="Bottom" ss:WrapText="1"/> 
    </Style> 
</Styles> 

Et puis, dans la Élément "Cell", ajoutez le style correspondant:

<Cell ss:StyleID="sMultiLine"> 

En fait, j'ajouté un ajustement XSLT mineur de sorte que la valeur ne est apparu si elle détecte les nouvelles lignes dans le contenu:

<xsl:if test="contains(.,'#10;')"> 
     <xsl:attribute name="ss:StyleID">sMultiLine</xsl:attribute> 
</xsl:if> 
Questions connexes