ASP MVC 使用ClosedXML 匯出Excel 檔案時出現(十六進位值 0x08) 是無效的字元。的錯誤,原因是資料中包含低階無法列印的字元造成
解決方式抓出資料後對所有欄位資料字元做判斷,有無法列印字元的字元就刪除他。
遍歷DataTable所有欄位值,更換異常字元
// 取得資料
DataTable dt = dal.GetWanFa01ADownload(dtStart, dtEnd);
// 避免(十六進位值 0x08) 是無效的字元。的異常
foreach (DataRow row in dt.Rows)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
if (row[i] != DBNull.Value)
{
row[i] = ReplaceLowOrderASCIICharacters(row[i].ToString());
}
}
}
更換異常字元的函數
private object 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();
}