C#中 用GetOleDbSchemaTable如何获取Excel文件指定位置的表名

时间:2022-04-23 09:31:43
1,GetOleDbSchemaTable获取Sheet名称不一致?  
例如:'附表1 $'_ 带下划线的非sheet出现

2,如何获取某个指定名称的sheet工作表之前的工作表名。
例如:仅获取名称为“回单”的sheet'工作表单之前的所以sheet表

12 个解决方案

#1


看看,我刚刚在下面这个帖子(2楼)中贴出来的代码:
http://topic.csdn.net/u/20080601/21/ba831acf-6bd5-4f61-81e6-e50502431b5e.html

#2


非常感谢CNBT的支持,刚刚看了你的链接,与我的问题不是一会事,不过还是谢谢你

#3


会的,看到一定要留言。谢谢了

#4


你是要获取excel中的数据,还是要获取execl的sheet页面名称?

#5


读取excel的数据
        private DataSet BindDsFromExcel(string strFileDir, string strDataName)
        {
            string strConn;
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileDir + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
            OleDbConnection OleConn = new OleDbConnection(strConn);
            OleConn.Open();
            String sql = "SELECT * FROM  [" + strDataName + "$]";

            OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
            DataSet OleDsExcle = new DataSet();
            OleDaExcel.Fill(OleDsExcle, strDataName);
            OleConn.Close();
            return OleDsExcle;
        }



写入、
private bool SaveRowToExcel(string[] matchRow)
        {
            try
            {
                Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();//创建Excel表
                Microsoft.Office.Interop.Excel.Workbook myWorkbook = myExcel.Workbooks._Open(strFileDir,
                Missing.Value, Missing.Value, Missing.Value, Missing.Value
                , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                , Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                Microsoft.Office.Interop.Excel.Worksheet xSheet =
                    (Microsoft.Office.Interop.Excel.Worksheet)myExcel.Sheets["Match_POI"];
                int size = xSheet.UsedRange.Rows.Count;//读取最后一行
                int col = matchRow.Length;

                for (int j = 0; j < col; j++)
                {
                    string sheet = matchRow[j];//获取要写入到Excel的string
                    xSheet.Cells[size + 1, j + 1] = sheet;//写入excel。cells[行,列]
                    //比如你想三行二列的值为abc。那么xSheet.Cells[3,2] = "abc";即可,我这里是循环写入。
                }

                myWorkbook.Save();
                xSheet = null;
                myWorkbook = null;
                myExcel.Quit();//一定要退出
                myExcel = null;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return true;
        }

#6


我想获取sheet名称。

例如:一个excel里有“南京”,“上海”,“北京”,“杭州”,“天津”,“国内”,“纽约”,“东京”这几个sheet页。
我如何仅仅获取“国内”sheet页前面的sheet名称,即仅获取“南京”,“上海”,“北京”,“杭州”,“天津”。

前提条件:这些sheet页不是固定的,可能还会动态添加,但是国内的城市一定是位于“国内”sheet页前面。
我就只要获取“国内”之前的sheet页

另外一个问题就是:明明只有三个sheet工作表单,但是用GetOleDbSchemaTable获取,却多出几个当$_的sheet
例如,原来excel里只有sheet1,sheet2,sheet3三个工作表单,但是会查出sheet1,sheet2,sheet3,sheet2$Print_Area多于的;
个人感觉是因为sheet2里面有自动筛选的功能,或者其他高级功能导致的,但是不知道应该如何仅仅只取sheet1,sheet2,sheet3

#7


是不是没有办法可以解决啊?高手路过的,看一下

#8


端午节大家都在休息啊,在么没有人会我的贴呢:(。

会的,不会的,一起讨论一下。

#9


UPDATE 楼主问题解决没,我出碰到和你一样的问题。

#10


求解!我也正遇到了这个问题。

#11


我的需求和遇到的问题和你完全一样,不知你解决了没有


引用 6 楼 shyyunxia 的回复:
我想获取sheet名称。

例如:一个excel里有“南京”,“上海”,“北京”,“杭州”,“天津”,“国内”,“纽约”,“东京”这几个sheet页。
我如何仅仅获取“国内”sheet页前面的sheet名称,即仅获取“南京”,“上海”,“北京”,“杭州”,“天津”。

前提条件:这些sheet页不是固定的,可能还会动态添加,但是国内的城市一定是位于“国内”sheet页前面。
我就只要……

#12


是不是
GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "table" });
这里的参数需要怎么设置啊

#1


看看,我刚刚在下面这个帖子(2楼)中贴出来的代码:
http://topic.csdn.net/u/20080601/21/ba831acf-6bd5-4f61-81e6-e50502431b5e.html

#2


非常感谢CNBT的支持,刚刚看了你的链接,与我的问题不是一会事,不过还是谢谢你

#3


会的,看到一定要留言。谢谢了

#4


你是要获取excel中的数据,还是要获取execl的sheet页面名称?

#5


读取excel的数据
        private DataSet BindDsFromExcel(string strFileDir, string strDataName)
        {
            string strConn;
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileDir + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
            OleDbConnection OleConn = new OleDbConnection(strConn);
            OleConn.Open();
            String sql = "SELECT * FROM  [" + strDataName + "$]";

            OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
            DataSet OleDsExcle = new DataSet();
            OleDaExcel.Fill(OleDsExcle, strDataName);
            OleConn.Close();
            return OleDsExcle;
        }



写入、
private bool SaveRowToExcel(string[] matchRow)
        {
            try
            {
                Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();//创建Excel表
                Microsoft.Office.Interop.Excel.Workbook myWorkbook = myExcel.Workbooks._Open(strFileDir,
                Missing.Value, Missing.Value, Missing.Value, Missing.Value
                , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                , Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                Microsoft.Office.Interop.Excel.Worksheet xSheet =
                    (Microsoft.Office.Interop.Excel.Worksheet)myExcel.Sheets["Match_POI"];
                int size = xSheet.UsedRange.Rows.Count;//读取最后一行
                int col = matchRow.Length;

                for (int j = 0; j < col; j++)
                {
                    string sheet = matchRow[j];//获取要写入到Excel的string
                    xSheet.Cells[size + 1, j + 1] = sheet;//写入excel。cells[行,列]
                    //比如你想三行二列的值为abc。那么xSheet.Cells[3,2] = "abc";即可,我这里是循环写入。
                }

                myWorkbook.Save();
                xSheet = null;
                myWorkbook = null;
                myExcel.Quit();//一定要退出
                myExcel = null;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return true;
        }

#6


我想获取sheet名称。

例如:一个excel里有“南京”,“上海”,“北京”,“杭州”,“天津”,“国内”,“纽约”,“东京”这几个sheet页。
我如何仅仅获取“国内”sheet页前面的sheet名称,即仅获取“南京”,“上海”,“北京”,“杭州”,“天津”。

前提条件:这些sheet页不是固定的,可能还会动态添加,但是国内的城市一定是位于“国内”sheet页前面。
我就只要获取“国内”之前的sheet页

另外一个问题就是:明明只有三个sheet工作表单,但是用GetOleDbSchemaTable获取,却多出几个当$_的sheet
例如,原来excel里只有sheet1,sheet2,sheet3三个工作表单,但是会查出sheet1,sheet2,sheet3,sheet2$Print_Area多于的;
个人感觉是因为sheet2里面有自动筛选的功能,或者其他高级功能导致的,但是不知道应该如何仅仅只取sheet1,sheet2,sheet3

#7


是不是没有办法可以解决啊?高手路过的,看一下

#8


端午节大家都在休息啊,在么没有人会我的贴呢:(。

会的,不会的,一起讨论一下。

#9


UPDATE 楼主问题解决没,我出碰到和你一样的问题。

#10


求解!我也正遇到了这个问题。

#11


我的需求和遇到的问题和你完全一样,不知你解决了没有


引用 6 楼 shyyunxia 的回复:
我想获取sheet名称。

例如:一个excel里有“南京”,“上海”,“北京”,“杭州”,“天津”,“国内”,“纽约”,“东京”这几个sheet页。
我如何仅仅获取“国内”sheet页前面的sheet名称,即仅获取“南京”,“上海”,“北京”,“杭州”,“天津”。

前提条件:这些sheet页不是固定的,可能还会动态添加,但是国内的城市一定是位于“国内”sheet页前面。
我就只要……

#12


是不是
GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "table" });
这里的参数需要怎么设置啊