如何在Excel EPPlus C#中添加换行?

22

我正在使用 Epplus 库将 Excel 中的 dataTable 进行转换。在我的前端网站中,我使用了一个文本区域,在其中还有一个换行符。但是问题是,当我将此文件转换为 Excel 时,文本显示为单行而不是换行。

我该如何在 Epplus 中添加换行符以实现换行?

我正在使用以下脚本:

using (ExcelPackage pck = new ExcelPackage(newFile)) {
  ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Accounts");
  ws.Cells["A1"].LoadFromDataTable(dataTable, true);
  pck.Save();
}
3个回答

26

您是否已经将单元格的文字换行打开?默认情况下是关闭的。因此,像这样:

<body>
    <form id="form1" runat="server">
    <div>
        <textarea id="TextArea1" style="height: 200px; width: 400px;" runat="server"></textarea>
    </div>
    <div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" Text="Button" />
    </div>
    </form>
</body>

以及这个:

protected void Button1_OnClick(object sender, EventArgs e)
{
    //Create the table from the textbox
    var dt = new DataTable();
    dt.Columns.Add("Column1");

    var dr = dt.NewRow();
    dr[0] = TextArea1.InnerText;

    dt.Rows.Add(dr);

    var excelDocName = @"c:\temp\temp.xlsx";
    var aFile = new FileInfo(excelDocName);

    if (aFile.Exists)
        aFile.Delete();

    var pck = new ExcelPackage(aFile);
    var ws = pck.Workbook.Worksheets.Add("Content");
    ws.Cells["A1"].LoadFromDataTable(dt, true);
    ws.Cells["A1:A2"].Style.WrapText = true;  //false by default
    pck.Save();
    pck.Dispose();

}

然后我把这个放在文本区域中:

This is line 1.

This is line 3.

This is line 5.

这里是带有换行符的开头。


4

.LoadFromDataTable()函数将保留dataTable中已有的换行符。

运行此最小示例将生成一个电子表格,其中单元格A2中的字符串包含换行符:

DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("TestCol");
DataRow row = dt.NewRow();
row["TestCol"] = "string that"+Environment.NewLine+"contains a linebreakc";
dt.Rows.Add(row);

using (var package = new ExcelPackage())
{
    ExcelWorksheet ws = package.Workbook.Worksheets.Add("DataTable");
    ws.Cells["A1"].LoadFromDataTable(dt, true);

    package.SaveAs(new FileInfo(@"C:\Temp\test.xlsx"));
}

我猜测数据中没有换行符,或者当您打开电子表格时,由于行高的缘故,您只能看到一行?

2
+1 这个方法可以工作,但它不会自动格式化单元格以便正确显示文本。(只是提醒注意) - Chad
查德是正确的,对于视觉效果来说,这个解决方案不太好。 - cbrawl

0

您也可以尝试这个解决方案:

string textOriginal = "First line text.| Second line text.";
string textToWrite = textOriginal.Replace("|", ("" + ((char)13) + ((char)10)));

myWorksheet.Cells["a1"].Value = textToWrite;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接