Как программно вставить новую строку в ячейку Excel на С#?
Вопрос
Я использую библиотеку Aspose для создания документа Excel.Где-то в какой-то ячейке мне нужно вставить новую строку между двумя частями текста.
Я попробовал « », но это не работает, просто отображает два квадратных символа в ячейке.Однако я могу нажать 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).
Я знаю, что вы используете C#, но я считаю, что это много легче понять, что делать, если вы сначала сделаете это в VBA, поскольку вы можете попробовать это «интерактивно», без необходимости ничего компилировать.Все, что вы делаете в C#, просто копирует то, что вы делаете в VBA, поэтому разницы практически нет.(Помните, что взаимодействие C# использует те же базовые библиотеки COM, что и VBA).
В любом случае, С# для этого будет:
oCell.Value = "A\nB";
Найди отличие :-)
РЕДАКТИРОВАТЬ 2:Аааа!Я только что перечитал пост и увидел, что вы используете библиотеку Aspose.Извините, в таком случае я понятия не имею.
Внутри Excel используется U+000D U+000A (CR+LF, \r\n
) для разрыва строки, по крайней мере, в его XML-представлении.Я также не смог найти значение непосредственно в ячейке.Он был перенесен в другой XML-файл, содержащий общие строки.Возможно, ячейки, содержащие разрывы строк, обрабатываются форматом файла по-другому, и ваша библиотека об этом не знает.
Электронная таблицаGear для .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.
Если кого-то интересует решение Infragistics, вот оно.
Использовать
Environment.NewLine
Убедитесь, что ваша ячейка упакована
dataSheet.Rows[i].Cells[j].CellFormat.WrapText = ExcelDefaultableBoolean.True;
« » работает нормально.Если ввод поступает из многострочного текстового поля, символы новой строки будут « », если их заменить на « », это будет работать.
Использование PEAR «Spreadsheet_Excel_Writer» и «OLE»:
Единственный способ, которым я мог получить "\n
"Работа заключалась в создании ячейки $format->setTextWrap();
а затем используя "\n
" должно сработать.
Вы можете использовать Chr(13).Затем просто оберните все это в Chr(34).Chr(34) — это двойные кавычки.
- Пример VB.Net:
- Контактная информация = ""
- TheContactInfo = Trim(TheEmail) & chr(13)
- TheContactInfo = TheContactInfo & Trim(ThePhone) & chr(13)
- TheContactInfo = Chr(34) & TheContactInfo & Chr(34)
Что сработало для меня:
worksheet.Cells[0, 0].Style.WrapText = true;
worksheet.Cells[0, 0].Value = yourStringValue.Replace("\\r\\n", "\r\n");
Моя проблема заключалась в том, что сбежал.
На самом деле, это действительно просто.
Вы можете редактировать XML-версию Excel.Отредактируйте ячейку, добавив в нее новую строку между текстом, а затем сохраните ее.Позже вы можете открыть файл в редакторе, тогда вы увидите новую строку, представленную
Попробуй....
Вы пробовали " ", я думаю, это должно сработать.