做了很多次读取Execl的功能了。今天头一次碰到这个问题:
'_xlnm._FilterDatabase$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。
今天是准备不考虑一个Execl有多少个表,表名叫什么。
通过下面代码:
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
for (int i = 0; i < schemaTable.Rows.Count; i++)
{
//schemaTable.Rows[i][2]每行第2列 或者"TABLE_NAME" 为表/选项卡名
string TableName = schemaTable.Rows[i]["TABLE_NAME"].ToString();
}
突然发现这样一个异常。打开Execl查看,的确没有'_xlnm._FilterDatabase$'这个鬼东西
但是读取出来的确有3个表。
发现Filter这个单词是过滤,重新打开看了下,的确是有过滤的。
去掉去掉,再试正常了,然后找了一张干净的表,再试试,也没问题。
好吧,避免Execl中存在过滤 会多一个 _xlnm._FilterDatabase$ 恶心的表,加个判断吧。
if (TableName.Contains("_FilterDatabase"))
{
continue;
}