如题,这个Excel明明只有一个sheet
代码如下:
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\t.xls;Extended Properties=\"Excel 8.0; Imex=1;HDR=yes;\";";
OleDbConnection con = new OleDbConnection(connString);
con.Open();
DataTable ret = con.GetSchema("Tables");
con.Close();
foreach (DataRow row in ret.Rows)
{
    Response.Write(row["TABLE_NAME"] + "<br>");
}
上面的代码输出了2行:
sales_contractinvoice
sales_contractinvoice$求解

解决方案 »

  1.   

    我在这个Excel里新建一个Sheet,名称为Sheet1
    把旧的Sheet里的内容拷贝过来,再删除旧的Sheet,
    就正常了,只读取出一个:
    Sheet1$
      

  2.   

    第二次尝试,我把Sheet名更改为别的,比如abcd
    此时输出的是:
    sales_contractinvoice
    abcd$难道这个Excel里还有一个隐藏Sheet?
      

  3.   

    按微软网站:http://office.microsoft.com/zh-cn/excel/HP051997822052.aspx
    上的解决方案,未能解决,继续求助……
      

  4.   

    就像你在word里复制黏贴的时候会长生很多隐藏的“~$ Microsoft Word 文档.doc”之类的文件一样。。
      

  5.   

    你说错了,
    参考我1楼的回复,只有一个sheet时,会有$我现在是判断,不包含$的,就忽略
    目前暂时是解决了,但是不知道原因,始终觉得是个隐患而且我删除这个Sheet,那个所谓隐藏的Sheet也就没了,这个问题经常出现,有的Excel就是有这个隐藏Sheet,有的又没有,真郁闷
      

  6.   

    还在编辑中的文件就会产生加$的临时文件
    楼主是不是打开EXCEL然后没保存就直接运行你的程序了
    所以会有临时SHEET
      

  7.   

    直接判断,有$结尾的是合法的Excel Sheet,非$结尾的不是合法的Sheet,直接过滤就可以。
      

  8.   

    GetSchema 方法返回的架构信息,所以不仅是Sheet,还包括自定义的区域,打印区域等等,而且不能用包含$来判读,Sheet对于的是SheetName最后一个是$(特别要注意:SheetName不包括特殊字符,如果包含特殊字符,比如"(",SheetName读取会自动加单引号,可以判读最后2个字符是$',)打印区域已Print_Area结尾。也有$