我正在使用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;\">");
编辑: 好的,这里有一些代码。请注意,通过创建一个包含以下内容的单元格,我能够确认使用的字符代码确实是10:
A
B
然后选择它并在VBA立即窗口中执行以下操作:
?Asc(Mid(Activecell.Value,2,1))
ActiveCell.Value = "A" & vbLf & "B"
(由于vbLf是字符代码10),所以在字符串中使用时需要注意。
我知道你正在使用C#,但我发现如果你先在VBA中试着做一遍,就能更容易弄清楚该怎么做,因为你可以在不编译任何东西的情况下“交互式”地尝试它。无论你在C#中做什么,都只是在复制你在VBA中所做的,所以很少有差别。(请记住,C#互操作性的东西只是使用与VBA相同的基础COM库)。
无论如何,这个问题的C#代码应该是:
oCell.Value = "A\nB";
寻找差异 :-)
编辑2: 噢呜!我刚才重新阅读了帖子,看到你正在使用Aspose库。抱歉,在这种情况下我不知道该怎么办。
在内部,Excel 使用 U+000D U+000A (CR+LF, \r\n
) 作为换行符,至少在其 XML 表示中如此。我也没有在单元格中直接找到这个值。它被迁移到另一个包含共享字符串的 XML 文件中。可能包含换行符的单元格在文件格式上有不同的处理方式,你的库可能不知道这一点。
如果有人对Infragistics解决方案感兴趣,这里有相关信息。
使用
Environment.NewLine
确保单元格换行
dataSheet.Rows[i].Cells[j].CellFormat.WrapText = ExcelDefaultableBoolean.True;
.NET的SpreadsheetGear是这样做的:
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);
E.Run runForBreak = new E.Run();
E.Text textForBreak = new E.Text() { Space = SpaceProcessingModeValues.Preserve };
textForBreak.Text = "\n";
runForBreak.Append(textForBreak);
sharedStringItem.Append(runForBreak);
\n
" 正常工作的唯一方法是将单元格设置为 $format->setTextWrap();
,然后使用 "\n
"。您可以使用Chr(13)。然后将整个内容用Chr(34)包裹起来。Chr(34)代表双引号。
"\n"很好用。如果输入来自多行文本框,换行符将是"\r\n",如果将其替换为"\n",它将正常工作。