2009-07-24 8 views
15

Ich verwende die Aspose-Bibliothek, um ein Excel-Dokument zu erstellen. Irgendwo in einer Zelle muss ich eine neue Zeile zwischen zwei Teilen des Textes einfügen.Wie programmgesteuert eine neue Zeile in einer Excel-Zelle in C# einzufügen?

Ich habe versucht "\ r \ n", aber es funktioniert nicht, zeigt nur zwei quadratische Symbole in der Zelle. Ich kann jedoch Alt + Eingabe drücken, um eine neue Zeile in derselben Zelle zu erstellen.

Wie füge ich programmgesteuert eine neue Zeile ein?

+0

verwendest du die richtige Kodierung? Eine .net-Zeichenkette ist UTF16 ... –

+0

Ich habe wirklich keine Ahnung. Ich ändere nur den Code von jemand anderem. Kann man ein Stück Schnur anders kodieren? – User

Antwort

19

Von den Aspose Zellen Foren: How to use new line char with in a cell?

Nachdem Sie liefern Text der Zelle IsTextWrapped Stil zu wahren

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

Dies funktionierte für mich zusammen mit dem "\ n" -Befehl im Text. – User

+0

erhielt diese Ausnahme: 'System .__ ComObject' enthält keine Definition für 'IsTextWrapped' – hakan

+1

Versuchen mit "worksheet.Cells [0, 0] .Style.WrapText = true;" stattdessen. – JCO9

5

Sie müssen den Zeichencode einfügen, den Excel verwendet, der IIRC ist 10 (zehn).


EDIT: OK, hier ist etwas Code. Man beachte, dass konnte ich, um zu bestätigen, dass der Zeichencode verwendet, in der Tat 10, durch eine Zelle zu schaffen, enthaltend:

A

B

... und dann die Auswahl und die Ausführung dies in dem VBA-Direktfenster:

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

So muss der Code, den Sie diesen Wert in einer anderen Zelle in VBA einzufügen wären:

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

(da vbLf Zeichencode 10 ist).

Ich weiß, Sie C# verwenden, aber ich finde es viel ist einfacher, um herauszufinden, was zu tun ist, wenn Sie es zuerst in VBA zu tun, da Sie es ausprobieren können „interaktiv“, ohne etwas kompilieren zu müssen. Was auch immer Sie in C# tun, repliziert nur, was Sie in VBA tun, so dass es selten einen Unterschied gibt. (Denken Sie daran, dass der Interop-Code von C# nur dieselben zugrunde liegenden COM-Bibliotheken wie VBA verwendet).

Wie dem auch sei, würde die C# für diese sein:

oCell.Value = "A\nB"; 

Finde den Unterschied :-)


EDIT 2: Aaaargh! Ich habe den Beitrag gerade gelesen und gesehen, dass Sie die Aspose-Bibliothek verwenden. Entschuldigung, in diesem Fall habe ich keine Ahnung.

+0

Und wie geht man das an? – User

+1

Nun, U + 000A ist \ n. Aber ich denke, wenn das funktionieren würde, hätte das Einfügen von \ r \ n auch funktioniert, hätte aber ein Quadrat auf der ersten Zelle hinterlassen. – Joey

+0

Ich habe noch nie VBA berührt oder gesehen, also wäre ich sowieso nicht dazu in der Lage. Danke für deine Zeit trotzdem. – User

3

Intern verwendet Excel U + 000D U + 000A (CR + LF, \r\n) für einen Zeilenumbruch, zumindest in seiner XML-Darstellung. Ich konnte den Wert auch nicht direkt in einer Zelle finden. Es wurde in eine andere XML-Datei mit freigegebenen Zeichenfolgen migriert. Möglicherweise werden Zellen, die Zeilenumbrüche enthalten, vom Dateiformat unterschiedlich behandelt, und Ihre Bibliothek weiß nichts darüber.

+0

CRLF scheint in Excel 2010 einwandfrei zu funktionieren, führt jedoch dazu, dass die nicht druckbare Zeichenbox in früheren Versionen angezeigt wird. Es scheint, dass nur die Verwendung von "\ n" (LF) für die Kompatibilität mit älteren Versionen von Excel erforderlich ist. –

-1

Haben Sie versucht "\ n" Ich denke, es sollte funktionieren.

+0

Versucht natürlich. Es tat es nicht. – User

1

tut es so aus:

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

Beachten Sie die "WrapText = true" - Excel den Text, ohne dass dies nicht einwickeln. Ich würde annehmen, dass Aspose ähnliche APIs hat.

Disclaimer: Ich besitze SpreadsheetGear LLC

+0

sollte nicht Enlivenment.NewLine auch funktionieren? – Khodor

1

"\ n" Werke setzen soll fein. Wenn die Eingabe von einem mehrzeiligen Textfeld kommt, sind die neuen Zeilenzeichen "\ r \ n", wenn dies durch "\ n" ersetzt wird, wird es funktionieren.

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

Wenn Sie den Text aus DB erhalten dann:

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

Mit PEAR 'Spreadsheet_Excel_Writer' und 'OLE':

Nur so konnte ich "\n" an die Arbeit machte die Zelle $format->setTextWrap(); und dann mit "\n" würde funktionieren.

0

Eigentlich ist es wirklich einfach.

Sie können eine XML-Version von Excel bearbeiten. Bearbeiten Sie eine Zelle, um ihr eine neue Zeile zwischen Ihrem Text zu geben, und speichern Sie sie dann. Später können Sie die Datei in Editor öffnen, dann werden Sie sehen, eine neue Linie von dargestellt wird &#10;

Haben Sie einen Versuch ....

1

Wenn jemand in der Infragistics Lösung interessiert ist, hier ist es.

  1. Verwenden

    Environment.NewLine

  2. Achten Sie darauf, Ihr Handy

    gewickelt

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

+0

Environment.NewLine funktioniert nicht! – sarepta

+0

ExcelDefaultableBoolean.True gibt es nicht. – hakan

0

Sie können Chr verwenden (13). Dann wickle das Ganze einfach in Chr (34). Chr (34) ist doppelte Anführungszeichen.

  • VB.Net Beispiel:
  • TheContactInfo = ""
  • TheContactInfo = Trim (TheEmail) & chr (13)
  • TheContactInfo = TheContactInfo & Trim (ThePhone) & chr (13)
  • TheContactInfo = Chr (34) & DieContactInfo & Chr (34)