2015-09-14 55 views
1

這裏是我的代碼:EPPlus LoadFromDataTable()是雙重逸出&符號

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表具有行其文本包含一個符號:&。例如,假設AT&T。在Excel中查看文件時,文本顯示爲AT&T。我鑽了sharedStrings.xml,發現文本被雙重轉義到AT&T

如何防止此行爲?我嘗試用雙引號將文本包裝起來,並註釋掉AutoFitColumns()WrapText這兩行。

回答

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

+0

啊,那是完全正確的。我有我的眼罩。 SQL服務器中的數據實際上並未轉義,但查詢執行的是轉義特殊字符的FOR XML PATH。謝謝! – Andrew