2009-07-24 3 views
15

Я использую библиотеку Aspose для создания документа Excel. Где-то в какой-то ячейке мне нужно вставить новую строку между двумя частями текста.Как вставить программно новую строку в ячейке Excel на C#?

Я попробовал «\ r \ n», но он не работает, просто отображает два квадратных символа в ячейке. Однако я могу нажать Alt + Enter, чтобы создать новую строку в той же ячейке.

Как вставить новую строку программно?

+0

Вы используете правильную кодировку? Строка .net - UTF16 ... –

+0

Я понятия не имею. Я просто модифицирую чужой код. Любой способ кодировать фрагмент строки по-разному? – User

ответ

19

Из Aspose Cells форумов: How to use new line char with in a cell?

После того, как вы поставляете текст, который вы должны задать стиль IsTextWrapped ячейки к истинному

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

Это работало для меня вместе с командой «\ n» в тексте. – User

+0

получил это исключение: «System .__ ComObject» не содержит определения для «IsTextWrapped» – hakan

+1

Попробуйте использовать «рабочий лист. Целлы [0, 0] .Style.WrapText = true;» вместо. – JCO9

5

Необходимо ввести код символа, который использует Excel, для которого IIRC - 10 (десять).


EDIT: Хорошо, вот какой-то код. Обратите внимание, что я был в состоянии подтвердить, что символ-код, используемый на самом деле 10, создав ячейку, содержащую:

B

... а затем, выбрав его и выполнение это в ближайшем окне VBA:

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

Таким образом, код, который нужно вставить это значение в другую ячейку в VBA будет:

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

(так как vbLf - код символа 10).

Я знаю, что вы используете C#, но я нахожу, что много легче понять, что делать, если вы сначала сделаете это в VBA, так как вы можете попробовать его «интерактивно», не имея при этом компилировать что-либо. Что бы вы ни делали на C#, просто реплицируйте то, что вы делаете в VBA, поэтому редко бывает какая-либо разница. (Помните, что материал C# interop просто использует те же базовые COM-библиотеки, что и VBA).

Во всяком случае, C# для этого было бы:

oCell.Value = "A\nB"; 

Пятно разница :-)


EDIT 2: Aaaargh! Я просто перечитал сообщение и увидел, что вы используете библиотеку Aspose. Извините, в этом случае я понятия не имею.

+0

А как подойти к этому? – User

+1

Ну, U + 000A - \ n. Но я думаю, что если бы это сработало, то вставка \ r \ n тоже сработала бы, но оставила бы квадрат в первой ячейке. – Joey

+0

Я никогда не касался и не видел VBA, поэтому я все равно не смог бы это сделать. Спасибо за ваше время. – User

3

Внутренний Excel использует U + 000D U + 000A (CR + LF, \r\n) для разрыва строки, по крайней мере, в представлении XML. Я также не мог найти значение непосредственно в ячейке. Он был перенесен в другой файл XML, содержащий общие строки. Возможно, ячейки, содержащие разрывы строк, обрабатываются по-разному по формату файла, и ваша библиотека не знает об этом.

+0

Кажется, что CRLF отлично работает в Excel 2010, но приводит к тому, что в более ранних версиях отображается непечатаемый символ. Кажется, что для совместимости со старыми версиями Excel требуется использование только «\ n» (LF). –

-1

Вы пробовали «\ n», я думаю, это должно сработать.

+0

Пробовал, конечно. Это не так. – User

1

делает это таким образом:

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

Обратите внимание на "WrapText = истина" - Excel не будет обернуть текст без этого. Я бы предположил, что у Aspose есть аналогичные API.

Отказ от ответственности: У меня есть SpreadsheetGear ООО

+0

не должен Enlivenment.NewLine работать тоже? – Khodor

1

"\ п" работает хорошо. Если вход поступает из многострочного текстового поля, новые строковые символы будут «\ r \ n», если он заменен на «\ n», он будет работать.

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

Если вы получаете текст из БД, то:

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

Использование PEAR 'Spreadsheet_Excel_Writer' и 'OLE':

Только так я мог получить "\n" для работы решений ячейка $format->setTextWrap();, а затем с использованием «\n» будет работать.

0

На самом деле, это действительно просто.

Вы можете отредактировать xml-версию Excel. Отредактируйте ячейку, чтобы дать ей новую строку между вашим текстом, а затем сохраните ее. Позже вы можете открыть файл в редакторе, то вы увидите, новая линия представлена ​​ &#10;

У попробовать ....

1

Если кто-то заинтересован в решении Infragistics, здесь она есть.

  1. Использование

    Environment.NewLine

  2. Убедитесь, что клетка обернута

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

+0

Environment.NewLine не работает! – sarepta

+0

ExcelDefaultableBoolean.True нет такой вещи. – hakan

0

Вы можете использовать Chr (13). Затем просто оберните все это в Chr (34). Chr (34) - двойные кавычки.

  • VB.Net Пример:
  • TheContactInfo = ""
  • TheContactInfo = уравновешивание (TheEmail) & CHR (13)
  • TheContactInfo = TheContactInfo & уравновешивания (ThePhone) & CHR (13)
  • TheContactInfo = Chr (34) & TheContactInfo & Chr (34)