2009-07-24 26 views
15

Używam biblioteki Aspose do tworzenia dokumentu Excel. Gdzieś w jakiejś komórce muszę wstawić nową linię między dwiema częściami tekstu.Jak wstawić programowo nową linię w komórce Excela w C#?

Próbowałem "\ r \ n", ale to nie działa, wyświetla tylko dwa kwadratowe symbole w komórce. Mogę jednak nacisnąć Alt + Enter, aby utworzyć nową linię w tej samej komórce.

Jak wstawić nowy wiersz programowo?

+0

czy używasz właściwego kodowania? Łańcuch .net jest UTF16 ... –

+0

Nie mam pojęcia. Po prostu modyfikuję czyjś kod. Jakikolwiek sposób inaczej kodować kawałek sznurka? – User

Odpowiedz

19

Z Aspose Cells forach: How to use new line char with in a cell?

Po podaniu tekstu należy ustawić komórki styl IsTextWrapped do prawdziwej

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

To działało dla mnie razem z poleceniem "\ n" w tekście. – User

+0

otrzymał ten wyjątek: "System .__ ComObject" nie zawiera definicji "IsTextWrapped" – hakan

+1

Spróbuj z "worksheet.Cells [0, 0] .Style.WrapText = true;" zamiast. – JCO9

5

Musisz wstawić kod znaku, którego używa program Excel, który IIRC wynosi 10 (dziesięć).


EDIT: OK, tu jest jakiś kod. Zauważ, że udało mi się potwierdzić, że postać kodu używany jest rzeczywiście 10, tworząc komórkę zawierającą:

B

... a następnie wybierając ją i wykonując to w VBA natychmiastowej okna:

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

Więc kod trzeba wstawić tę wartość do innej komórki w VBA będzie:

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

(ponieważ vbLf jest kodem znaku 10).

Wiem, że używasz C#, ale uważam, że jest to dużo łatwiej dowiedzieć się, co zrobić, jeśli po raz pierwszy robisz to w VBA, ponieważ możesz wypróbować to "interaktywnie" bez konieczności kompilowania czegokolwiek. Cokolwiek robisz w C# jest tylko replikowanie tego, co robisz w VBA, więc rzadko istnieje różnica. (Pamiętaj, że rzeczy współdziałające C# używają tylko tych samych bazowych bibliotek COM, co VBA).

W każdym razie, C# dla tego byłoby:

oCell.Value = "A\nB"; 

Spot różnica :-)


EDIT 2: Aaaargh! Ponownie przeczytałem wpis i zobaczyłem, że używasz biblioteki Aspose. Przepraszam, w takim razie nie mam pojęcia.

+0

A jak do tego podejść? – User

+1

Cóż, U + 000A to \ n. Ale myślę, że gdyby to działało, wstawienie \ r \ n też by działało, ale zostawiłoby kwadrat na pierwszej komórce. – Joey

+0

Nigdy nie dotknąłem ani nie widziałem VBA, więc i tak nie byłbym w stanie tego zrobić. Dziękuję za twój czas. – User

3

Wewnętrznie program Excel używa U + 000D U + 000A (CR + LF, \r\n) do podziału wiersza, przynajmniej w jego reprezentacji XML. Nie mogłem też znaleźć wartości bezpośrednio w komórce. Został zmigrowany do innego pliku XML zawierającego udostępnione ciągi. Być może komórki, które zawierają podziały wierszy, są obsługiwane inaczej w formacie pliku, a twoja biblioteka o tym nie wie.

+0

Wygląda na to, że CRLF działa poprawnie w programie Excel 2010, ale prowadzi do niedrukowalnego pola znakowego wyświetlanego we wcześniejszych wersjach. Wygląda na to, że użycie "\ n" (LF) jest wymagane w celu zapewnienia zgodności ze starszymi wersjami programu Excel. –

-1

Czy próbowałeś "\ n" Myślę, że to powinno działać.

+0

Próbowałem, oczywiście. Tak nie było. – User

1

robi to w ten sposób:

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

Uwaga "WrapText = true" - Excel nie będzie zawijany tekst bez tego. Zakładam, że Aspose ma podobne API.

Zastrzeżenie: Jestem właścicielem SpreadsheetGear LLC

+0

should not Enlivenment.NewLine też działa? – Khodor

1

"\ n" działa w porządku. Jeśli dane wejściowe pochodzą z wieloliniowego pola tekstowego, nowe znaki będą miały postać "\ r \ n", jeśli zostanie zastąpione przez "\ n", będzie działać.

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

Jeśli otrzymujesz tekst z DB następnie:

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

używania PEAR 'Spreadsheet_Excel_Writer' oraz 'Ole':

Jedyny sposób mogę dostać "\n" do pracy robił komórka $format->setTextWrap();, a następnie za pomocą "\n" będzie działać.

0

W rzeczywistości jest to naprawdę proste.

Możesz edytować wersję Excela w wersji xml. Edytuj komórkę, aby nadać jej nową linię, a następnie zapisz ją. Później można otworzyć plik w edytorze, a następnie pojawi się nowa linia jest reprezentowana przez &#10;

Spróbować ....

1

Jeśli ktoś jest zainteresowany w roztworze Infragistics, tutaj jest.

  1. Zastosowanie

    Environment.NewLine

  2. Upewnij się, że komórka jest owinięty

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

+0

Environment.NewLine nie działa! – sarepta

+0

ExcelDefaultableBoolean.True nie ma czegoś takiego. – hakan

0

Można użyć Chr (13). Następnie po prostu zapakuj całość w Chr (34). Chr (34) to podwójne cytaty.

  • VB.Net przykład:
  • TheContactInfo = ""
  • TheContactInfo = zaworu (theEmail) & CHR (13)
  • TheContactInfo = TheContactInfo & zaworu (ThePhone) & CHR (13)
  • TheContactInfo = Chr (34) & TheContactInfo & Chr (34)
Powiązane problemy