EPPlus LoadFromDataTable() 是双转义符号

EPPlus LoadFromDataTable() is double escaping ampersands

这是我的代码:

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();

_rules DataTable 的行的文本中包含与号:&。比方说 AT&T。查看 Excel 中的文件时,文本显示为 AT&T。我深入研究 sharedStrings.xml 发现文本被双重转义为 AT&T.

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

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

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

[TestMethod]
public void Amp_String_Test()
{
    //

    //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();
    }
}