EPPlus LoadFromDataTable()是双重转义&符号

时间:2015-09-14 16:21:32

标签: c# .net xlsx epplus-4

这是我的代码:

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的行包含&符号:&amp ;.我们假设AT&T为例。在Excel中查看文件时,文本显示为AT&T。我深入研究了 sharedStrings.xml ,发现文本被双重转义为AT&T

如何防止此行为?我尝试用双引号包装文本以及注释掉AutoFitColumns()WrapText行。

1 个答案:

答案 0 :(得分: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();
    }
}

enter image description here