(十六進位值 0x08) 是無效的字元。 的處理

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();
}