原帖地址:http://bbs.csdn.net/topics/310230098

-----------------------------------------------------------------------------------------------------

我的excel是2003版本的,里边有sheet1、sheet2两个工作表,当使用GetOleDbSchemaTable获取表Schema时,结果是4个,分别为:

sheet1 sheet1$ sheet2 sheet2$
代码如下
string cnnString = string.Format("Provider=Microsoft.Jet.OleDb.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=yes; IMEX=2;'", sourceFile);
OleDbConnection cnn=new OleDbConnection(destCnnString);
cnn.Open ();
DataTable dtSchema = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
为什么呢?

-----------------------------------------------------------------------------------------------------

应该是你删除掉的那几个,我不明白为什么删除后通过你这样的方式还能看到
即如果你建立了4个sheets删除两个,但是会发现还是能找到四个

-----------------------------------------------------------------------------------------------------

奇怪了!如果删除sheet1$,那么sheet1也就不见了!如果我新建一个sheet,那么就不会多一个sheet出来!查看隐藏的sheet也没有发现,为什么会多sheet出来呢?这个excel是别人给的,如果我自己建立excel文件则是正常的,为什么呢?

-----------------------------------------------------------------------------------------------------

又发现一个问题,如果是用dts导出来的,那就会有两个表名,如customers$和customers,不知道为什么?

-----------------------------------------------------------------------------------------------------

确定问题所在了!
1:GetOleDbSchemaTable取到的表的信息还包括excel的命名区域;
2:因为excel是通过dts导出生成的,导出时同时生成了命名区域;(还没找到哪里可以设置不生成命名区域)
3:在excel2007中,公式--命名管理器中,删除命名区域即可!

05-11 14:37