1

这是我的代码:

ExcelPackage pck = new ExcelPackage(stream);
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Rules");           
ws.Cells["A1"].LoadFromDataTable(_rules, true);
ws.Cells[ws.Dimension.Address].AutoFitColumns();
ws.Cells[ws.Dimension.Address].Style.WrapText = true;
pck.Save();

DataTable的_rules行中的文本包含一个 & 符号:&。举个例子吧AT&T。在 Excel 中查看文件时,文本显示为AT&T. 我深入研究了sharedStrings.xml,发现文本被双重转义为AT&T.

如何防止这种行为?我尝试将文本用双引号括起来并注释掉AutoFitColumns()andWrapText行。

4

1 回答 1

1

你确定它不在源表中吗?由于共享字符串是 xml,它必须转义任何 & 符号。因此,如果源表已经包含在其中,那么您所看到的正是您所期望的AT&T

所以,在这里,当我在好的和坏的格式文本之间交替时,你会看到同样的事情:

[TestMethod]
public void Amp_String_Test()
{
    //http://stackoverflow.com/questions/32569450/epplus-loadfromdatatable-is-double-escaping-ampersands

    //Throw in some data
    var datatable = new DataTable("tblData");
    datatable.Columns.AddRange(new[] { new DataColumn("Col1", typeof(int)), new DataColumn("Col2", typeof(int)), new DataColumn("Col3", typeof(object)) });

    for (var i = 0; i < 10; i++)
    {
        var row = datatable.NewRow(); row[0] = i; row[1] = i * 10;
        //Alternate text
        row[2] = i%2 == 0 ? "AT&amp;T": "AT&T"; 
        datatable.Rows.Add(row);
    }

    //Create a test file
    var fi = new FileInfo(@"c:\temp\amptest.xlsx");
    if (fi.Exists)
        fi.Delete();

    using (var pck = new ExcelPackage(fi))
    {
        var worksheet = pck.Workbook.Worksheets.Add("Sheet1");
        worksheet.Cells.LoadFromDataTable(datatable, true);
        pck.Save();
    }
}

在此处输入图像描述

于 2015-09-14T17:36:17.597 回答