Как вставить программно новую строку в ячейке Excel на С#?

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

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

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

Ответы

Ответ 2

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

Ответ 3

Вам нужно вставить код символа, который использует 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. Извините, в этом случае я понятия не имею.

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

    Environment.NewLine

  • Убедитесь, что ваша ячейка завернута.

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

Ответ 8

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

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

Ответ 9

Собственно, это действительно просто.

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

Попробуйте....

Ответ 10

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

  • Пример VB.Net:
  • TheContactInfo = ""
  • TheContactInfo = Trim (TheEmail) и chr (13)
  • TheContactInfo = TheContactInfo и Trim (ThePhone) и chr (13)
  • TheContactInfo = Chr (34) и TheContactInfo и Chr (34)

Ответ 11

Что сработало для

worksheet.Cells[0, 0].Style.WrapText = true;
worksheet.Cells[0, 0].Value = yourValue.Replace("\\r\\n", "\r\n");

Ответ 12

Вы пробовали "\n", я думаю, он должен работать.