读书人

C# 与 Excel通讯有关问题

发布时间: 2012-11-12 12:31:58 作者: rapoo

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

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

读书人网 >C#

热点推荐