日期:2014-05-17  浏览次数:20899 次

C# 与 Excel通讯问题
代码如下: (取出当前指定的 Excel下的所有Sheet名)


C# code


   string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
            OleDbConnection conn = new OleDbConnection(strConn);

            conn.Open();

            //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等  
            DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });

            //包含excel中表名的字符串数组
            string[] strTableNames = new string[dtSheetName.Rows.Count];
            for (int k = 0; k < dtSheetName.Rows.Count; k++)
            {
                strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
            }
            return strTableNames;



调用时 问题出来了 。返回的结果是:

生产管理科$
生产管理科$_FilterDatabase
生日汇总$
制造一科$
制造一科$_FilterDatabase
制造二科$
制造二科$_FilterDatabase
总务科$
总务科$_FilterDatabase
Sheet1$
Sheet1$_FilterDatabase
技术科$
技术科$_FilterDatabase
品质管理科$
品质管理科$_FilterDatabase
参保人员统计$

问题:有的片段根本不存在(品质管理科$_FilterDatabase) 那么它又代表这什么,我只想取所有的片段,不要后面带_FilterDatabase ,有高人指点下,谢谢

或者我调用的方法是否有问题呢 ?

------解决方案--------------------
帮顶,不懂 c#
------解决方案--------------------
_FilterDatabase。这是在打开 AutoFilter时,Excel 在工作簿中创建的隐藏命名区域。
查询时都找出来了.在C#中处理时,可以把以"_FilterDatabase"结尾的表过过滤掉,不用处理.
------解决方案--------------------
for each exSheet in exApp.Application.Workbooks(name).Sheets
exSheet. ... '这里引用对该工作表的操作
...
next
------解决方案--------------------
参考
为 AutoFilter 结果创建智能标记和事件代码
------解决方案--------------------
还有统计图
------解决方案--------------------
楼主的EXCEL表中,是否用过统计图,_FilterDatabase统计图一定用到这种格式。
别的邮件合并、透视图等就不知道了,你可以测试一下。
------解决方案--------------------
得出的结果是对的,是Excel文件存在隐藏内容。楼主可以使用Data Import/Export试试,也会有那些Sheet,只是楼主可以用代码过滤掉不想要的Sheet名。
------解决方案--------------------
操作EXCEL还是建议楼主使用ASPOSE.CELL

很好用的商业组件,我现在就在用。