0%

【XML】將資料匯出到EXCEL - 透過ClosedXML套件

最近有寫Excel報表的需求,ClosedXML真的是個不錯的套件

1
2
3
4
5
6
7
8
9
10
var workbook = new XLWorkbook(); //new Excel
var sheet_A = workbook.Worksheets.Add("Sheet_A"); //新增Sheet到 Excel

//塞資料到Sheet中
worksheet.Cell(_index, 1).Value = "欄位一";
worksheet.Cell(_index, 2).Value = "欄位二";
worksheet.Cell(_index, 3).Value = "欄位三";
worksheet.Cell(_index, 4).Value = "欄位四";
worksheet.Cell(_index, 5).Value = "欄位五";

用法還滿簡單的,如果有更深入的用法想瞭解也可以到ClosedXml網站看文件
在使用的過程有遇到一個情況就是從DB裡面撈出大量的資料倒入Excel時,匯出打開檔案會顯示Excel已經損毀,可是直接把DB撈出來的資料用複製貼上卻可以完整地貼到Excel中,存檔再打開也不會壞掉。這個問題搞了好久…最後查到大陸網站得到以下的解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <summary>
/// 提示??,??信息如下: 十六?制值 0x0B 是?效的字符??
///?生原因是xml文件中包含低位非打印字符造成的
///?理方法:在?生xml文件的?候,??低位非打印字符
/// </summary>
/// <param name="tmp" />
/// <returns></returns>
public static string ReplaceLowOrderASCIICharacters(string tmp)
{
StringBuilder info = new StringBuilder();
foreach (char cc in tmp)
{
int ss = (int)cc;
if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))
info.AppendFormat(" ", ss);//&#x{0:X};
else info.Append(cc);
}
return info.ToString();
}

把字元丟到這個function去過濾後就可以避免錯誤了!!