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

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

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

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

11 ответов


с форумов 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, создав ячейку, содержащую:

A

B

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

?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";

найди разницу :-)


Изменить 2: просто! Я просто перечитал сообщение и увидел, что вы используете библиотеку 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, вот он.

  1. использовать

    Environment.NewLine

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

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


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

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

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


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

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


вы можете использовать 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)

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