这是我的代码:
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
行。
答案 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&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();
}
}