2009-07-24 12 views
15

J'utilise la bibliothèque Aspose pour créer un document Excel. Quelque part dans une cellule, j'ai besoin d'insérer une nouvelle ligne entre deux parties du texte.Comment insérer par programmation une nouvelle ligne dans une cellule Excel en C#?

J'ai essayé "\ r \ n" mais cela ne fonctionne pas, affiche simplement deux symboles carrés dans la cellule. Je peux cependant appuyer sur Alt + Entrée pour créer une nouvelle ligne dans cette même cellule.

Comment insérer une nouvelle ligne par programme?

+0

utilisez-vous le bon encodage? Une chaîne de .net est UTF16 ... –

+0

Je n'ai aucune idée vraiment. Je modifie juste le code de quelqu'un d'autre. Un moyen d'encoder un morceau de corde différemment? – User

Répondre

19

des forums Cellules Aspose: How to use new line char with in a cell?

Une fois que vous fournissez le texte que vous devez définir le style IsTextWrapped de la cellule à true

worksheet.Cells[0, 0].Style.WrapText = true; 
+6

Cela a fonctionné pour moi avec la commande "\ n" dans le texte. – User

+0

a reçu cette exception: 'System .__ ComObject' ne contient pas de définition pour 'IsTextWrapped' – hakan

+1

Essayez avec "worksheet.Cells [0, 0] .Style.WrapText = true;" au lieu. – JCO9

5

Vous devez insérer le code de caractère utilisé par Excel, lequel IIRC est 10 (dix).


EDIT: OK, voici un code. Notez que je suis en mesure de confirmer que le caractère de code utilisé est en effet 10, en créant une cellule contenant:

A

B

... et puis en sélectionnant et exécuter ceci dans la fenêtre immédiate VBA:

?Asc(Mid(Activecell.Value,2,1)) 

Ainsi, le code que vous devez insérer cette valeur dans une autre cellule en VBA serait:

ActiveCell.Value = "A" & vbLf & "B" 

(puisque vbLf est le code de caractère 10).

Je sais que vous utilisez C# mais je trouve que c'est beaucoup plus facile de savoir quoi faire si vous le faites pour la première fois dans VBA, puisque vous pouvez l'essayer "interactivement" sans avoir à compiler quoi que ce soit. Tout ce que vous faites en C# ne fait que reproduire ce que vous faites dans VBA, donc il y a rarement une différence. (Rappelez-vous que l'interopérabilité C# n'utilise que les mêmes bibliothèques COM sous-jacentes que VBA).

Quoi qu'il en soit, le C# pour ce serait:

oCell.Value = "A\nB"; 

spot la différence :-)


EDIT 2: Aaaargh! Je viens de relire le message et j'ai vu que vous utilisez la bibliothèque Aspose. Désolé, dans ce cas, je n'en ai aucune idée.

+0

Et comment aborder cela? – User

+1

Eh bien, U + 000A est \ n. Mais je pense que si cela fonctionnait, alors insérer \ r \ n aurait aussi fonctionné, mais aurait laissé un carré sur la première cellule. – Joey

+0

Je n'ai jamais touché ni vu VBA, donc je ne serais pas capable de le faire quand même. Merci pour votre temps de toute façon. – User

3

En interne Excel utilise U + 000D U + 000A (CR + LF, \r\n) pour un saut de ligne, au moins dans sa représentation XML. Je ne pouvais pas non plus trouver la valeur directement dans une cellule. Il a été migré vers un autre fichier XML contenant des chaînes partagées. Peut-être que les cellules qui contiennent des sauts de ligne sont traitées différemment selon le format de fichier et votre bibliothèque ne le sait pas.

+0

Il semble que CRLF fonctionne bien dans Excel 2010, mais conduit à la boîte de caractère non imprimable affichée dans les versions antérieures. Il semble que l'utilisation de "\ n" (LF) est requise pour la compatibilité avec les anciennes versions d'Excel. –

-1

Avez-vous essayé "\ n" Je suppose que cela devrait fonctionner.

+0

Essayé, bien sûr. Ce n'est pas le cas. – User

1

il le fait ainsi:

 IWorkbook workbook = Factory.GetWorkbook(); 
     IRange a1 = workbook.Worksheets[0].Cells["A1"]; 
     a1.Value = "Hello\r\nWorld!"; 
     a1.WrapText = true; 
     workbook.SaveAs(@"c:\HelloWorld.xlsx", FileFormat.OpenXMLWorkbook); 

Notez le "WrapText = true" - Excel ne sera pas envelopper le texte sans cela. Je suppose que Aspose a des API similaires.

Disclaimer: Je possède SpreadsheetGear LLC

+0

ne devrait pas fonctionner Enlivenment.NewLine aussi? – Khodor

1

"\ n" œuvres bien. Si l'entrée provient d'une zone de texte multiligne, les caractères de la nouvelle ligne seront "\ r \ n", si cela est remplacé par "\ n", cela fonctionnera.

7
cell.Text = "your firstline<br style=\"mso-data-placement:same-cell;\">your secondline"; 

Si vous obtenez le texte de DB puis:

cell.Text = textfromDB.Replace("\n", "<br style=\"mso-data-placement:same-cell;\">"); 
0

En utilisant PEAR 'Spreadsheet_Excel_Writer' et 'OLE':

je pouvais ainsi obtenir "\n" au travail a été fait la cellule $format->setTextWrap(); puis en utilisant "\n" fonctionnerait.

0

En fait, c'est vraiment simple.

Vous pouvez éditer une version xml d'Excel. Modifiez une cellule pour lui donner une nouvelle ligne entre votre texte, puis enregistrez-la. Plus tard, vous pouvez ouvrir le fichier dans l'éditeur, vous verrez une nouvelle ligne est représentée par &#10;

Ayez un essai ....

1

Si quelqu'un est intéressé par la solution Infragistics, voilà.

  1. Utilisez

    Environment.NewLine

  2. Assurez-vous que votre portable est enveloppé

    dataSheet.Rows[i].Cells[j].CellFormat.WrapText = ExcelDefaultableBoolean.True;

+0

Environment.NewLine ne fonctionne pas! – sarepta

+0

ExcelDefaultableBoolean.True il n'y a pas une telle chose. – hakan

0

Vous pouvez utiliser Chr (13). Ensuite, enveloppez le tout dans Chr (34). Chr (34) est des guillemets doubles.

  • VB.Net Exemple:
  • TheContactInfo = ""
  • TheContactInfo = trim (TheEmail) & chr (13)
  • TheContactInfo = TheContactInfo & garniture (thephone) & chr (13)
  • TheContactInfo = Chr (34) & TheContactInfo & Chr (34)
Questions connexes