J'utilise la bibliothèque Aspose pour créer un document Excel. Quelque part dans une cellule, je dois insérer une nouvelle ligne entre deux parties du texte.
J'ai essayé "\ r\n" mais cela ne fonctionne pas, affiche seulement 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?
Depuis les forums Aspose Cells: Comment utiliser un nouveau caractère avec des caractères dans une cellule?
Après avoir fourni du texte, vous devez définir le style IsTextWrapped de la cellule sur true.
worksheet.Cells[0, 0].Style.WrapText = true;
cell.Text = "your firstline<br style=\"mso-data-placement:same-cell;\">your secondline";
Si vous recevez le texte de DB, alors:
cell.Text = textfromDB.Replace("\n", "<br style=\"mso-data-placement:same-cell;\">");
Vous devez insérer le code de caractère utilisé par Excel, qui correspond à IIRC 10 (dix).
EDIT: OK, voici du code. Notez que j'ai pu confirmer que le code de caractère utilisé est bien 10, en créant une cellule contenant:
UNE
B
... puis en le sélectionnant et en l'exécutant dans la fenêtre immédiate de VBA:
?Asc(Mid(Activecell.Value,2,1))
Ainsi, le code nécessaire pour insérer cette valeur dans une autre cellule de 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 qu'il est beaucoup plus facile de comprendre ce qu'il faut faire si vous le faites d'abord dans VBA, car vous pouvez l'essayer. "interactivement" sans rien compiler. Quoi que vous fassiez en C # ne fait que reproduire ce que vous faites dans VBA, il n'y a donc pratiquement aucune différence. (Rappelez-vous que l’interopérabilité C # utilise uniquement les mêmes bibliothèques COM sous-jacentes que VBA).
Quoi qu'il en soit, le C # pour cela serait:
oCell.Value = "A\nB";
Trouve la différence :-)
EDIT 2: Aaaargh! Je viens de relire le message et j'ai vu que vous utilisiez la bibliothèque Aspose. Désolé, dans ce cas je n'en ai aucune idée.
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 contenant des sauts de ligne sont gérées différemment par le format de fichier et que votre bibliothèque n’en sait rien.
SpreadsheetGear for .NET le fait de cette façon:
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
Si quelqu'un est intéressé par la solution Infragistics, la voici.
Utilisation
Environment.NewLine
Assurez-vous que votre cellule est bien emballée
dataSheet.Rows[i].Cells[j].CellFormat.WrapText = ExcelDefaultableBoolean.True;
Utilisation de PEAR 'Spreadsheet_Excel_Writer' et 'OLE':
La seule façon pour moi de faire fonctionner "\n
" était de créer la cellule $format->setTextWrap();
puis d'utiliser "\n
".
"\ n" fonctionne bien. Si l'entrée provient d'une zone de texte multiligne, les caractères de la nouvelle ligne seront "\ r\n". Si ceci est remplacé par "\ n", cela fonctionnera.
Vous pouvez utiliser Chr (13). Ensuite, emballez le tout dans Chr (34). Chr (34) est des guillemets doubles.
Ce qui a fonctionné pour moi:
worksheet.Cells[0, 0].Style.WrapText = true;
worksheet.Cells[0, 0].Value = yourStringValue.Replace("\\r\\n", "\r\n");
Mon problème était que le\r\n est venu échappé.