Ответ 1
Из форумов Aspose Cells: Как использовать символ новой строки в ячейке?
После того, как вы введете текст, вы должны установить стиль ячейки IsTextWrapped в true
worksheet.Cells[0, 0].Style.WrapText = true;
Я использую библиотеку Aspose для создания документа Excel. Где-то в какой-то ячейке мне нужно вставить новую строку между двумя частями текста.
Я попробовал "\ r\n", но он не работает, просто отображает два квадратных символа в ячейке. Однако я могу нажать Alt + Enter, чтобы создать новую строку в той же ячейке.
Как вставить новую строку программно?
Из форумов Aspose Cells: Как использовать символ новой строки в ячейке?
После того, как вы введете текст, вы должны установить стиль ячейки IsTextWrapped в true
worksheet.Cells[0, 0].Style.WrapText = true;
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;\">");
Вам нужно вставить код символа, который использует Excel, для которого IIRC - 10 (десять).
РЕДАКТИРОВАТЬ: ОК, здесь есть код. Обратите внимание, что я смог подтвердить, что используемый код символа действительно равен 10, создав ячейку, содержащую:
А
В
... и затем выбрав его и выполнив его в ближайшем окне VBA:
?Asc(Mid(Activecell.Value,2,1))
Итак, код, который вам нужно вставить в другую ячейку в VBA, должен быть:
ActiveCell.Value = "A" & vbLf & "B"
(поскольку vbLf является символьным кодом 10).
Я знаю, что вы используете С#, но мне гораздо легче понять, что делать, если вы сначала сделаете это в VBA, так как вы можете попробовать его "в интерактивном режиме", не компилируя ничего. Что бы вы ни делали на С#, просто реплицируйте то, что вы делаете в VBA, поэтому редко бывает какая-то разница. (Помните, что материал С# interop просто использует те же базовые библиотеки COM, что и VBA).
В любом случае, С# для этого будет:
oCell.Value = "A\nB";
Определите разницу: -)
EDIT 2: Aaaargh! Я просто перечитал сообщение и увидел, что вы используете библиотеку Aspose. Извините, в этом случае я понятия не имею.
Внутри Excel использует U + 000D U + 000A (CR + LF, \r\n
) для разрыва строки, по крайней мере, в своем представлении XML. Я также не мог найти значение непосредственно в ячейке. Он был перенесен в другой файл XML, содержащий общие строки. Возможно, ячейки, содержащие разрывы строк, обрабатываются по-разному по формату файла, и ваша библиотека не знает об этом.
SpreadsheetGear для .NET делает это следующим образом:
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 = true" - Excel не будет обтекать текст без этого. Я бы предположил, что у Aspose есть аналогичные API.
Отказ от ответственности: у меня есть SpreadsheetGear LLC
"\n" работает нормально. Если вход поступает из многострочного текстового поля, новые строковые символы будут "\ r\n", если он заменен на "\n", он будет работать.
Если кто-то заинтересован в решении Infragistics, вот оно.
Использование
Environment.NewLine
Убедитесь, что ваша ячейка завернута.
dataSheet.Rows[i].Cells[j].CellFormat.WrapText = ExcelDefaultableBoolean.True;
Использование PEAR 'Spreadsheet_Excel_Writer' и 'OLE':
Единственным способом, с помощью которого я мог "\n
" работать, было сделать ячейку $format->setTextWrap();
, а затем использовать "\n
".
Собственно, это действительно просто.
Вы можете редактировать xml-версию excel. Отредактируйте ячейку, чтобы дать ей новую строку между вашим текстом, а затем сохраните ее. Позже вы можете открыть файл в редакторе, после чего вы увидите, что новая строка представлена
Попробуйте....
Вы можете использовать Chr (13). Затем просто оберните все это в Chr (34). Chr (34) - двойные кавычки.
Что сработало для
worksheet.Cells[0, 0].Style.WrapText = true;
worksheet.Cells[0, 0].Value = yourValue.Replace("\\r\\n", "\r\n");
Вы пробовали "\n", я думаю, он должен работать.