怎么得到一个Excel文件的工作表数和对应的工作表名?

时间:2021-08-27 09:29:45
select * from $[SHEET1]
和select * from [SHEET1$]
有什么区别?
我用ADO.net读Excel数据,可是只知道文件名,如何如何获得每个sheet呢?
private void GetConnect (String filename )
{
//创建一个数据链接
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = "+filename + ";Extended Properties=Excel 8.0" ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
string strCom = " SELECT * FROM [Sheet1$] " ;
try
{
myConn.Open ( ) ;
//打开数据链接,得到一个数据集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
//创建一个 DataSet对象
myDataSet = new DataSet ( ) ;
//得到自己的DataSet对象
myCommand.Fill ( myDataSet , "[Sheet1$]" ) ;
//关闭此数据链接
}
catch(Exception)
{
MessageBox.Show("所需文件不存在");
}
finally
{
myConn.Close ( ) ;
}
}

5 个解决方案

#1


可能要引用EXCEL,workbooks("文件名")的属性中有

#2


我要循环得到每个Sheet中的数据,用纯ADO.net
不用Excel的Application对象

#3


用ADO.Net只选其中2-10行
的查询语句中的Where条件怎么写?



#4


下面是用VB6.0写的程序.


Dim oExcel As Excel.Application '定义一个excel的应用对象
Dim oBook As Excel.Workbook     '定义一个工作表
'要使用上面的两个对象必须在工程中引用excel的动态库.
Dim i As Long
      
    set oExcel = new Excel.Application 
        
    If chkHavePassword.Value Then
    '上面是判断一个check控件的值,决定要打开的excel是否有密码.
        
        sOpenUser = Trim(txtUser.Text)
        '密码一般有两个,读密码和写密码.
        '分别拿到
        sRPassword = Trim(txtReadPassword.Text)
        sWPassword = Trim(txtWritePassword.Text)
        '调用工作表的.open方法打开指定的文件,最重要的就是参数了.
        '不过我想仔细看一下还是不难理解的,注意顺序和位置就可以了.
        Set oBook = oExcel.Workbooks.Open(sFullFileName, , , , sRPassword, sWPassword)
        '打开后你就可以直接操作这个文件了.
        '下面的用法是把它另存到一个文件里,这是为了我操作方便而写的,我要用ADO直接打开这个文件,
        '而ADO是不能直接打开带密码的文件,所以我另存到一个新文件中,然后再打开新的文件.
        '后面的操作就看你怎么用了.这个我就不多说了.
        
        oBook.SaveAs GetWindowsTempPath & "SaveAs.xls", , "", ""
        sFullFileName = GetWindowsTempPath & "SaveAs.xls"
    Else
        Set oBook = oExcel.Workbooks.Open(sFullFileName)
    End If
   
   
    'oBook.Sheets.count 是总数
   
    For i = 1 To oBook.Sheets.Count
        '这就是你要的工作表名.
        lstSheet.AddItem oBook.Sheets.Item(i).Name
    Next
    If lstSheet.ListCount > 0 Then lstSheet.ListIndex = 0

    '最后实用结束时一定要把两个对象关闭并退出,不然会在内存中注留下来,这是不好的.
    oBook.Close
    
    oExcel.Quit

End Function

#5


用ADO.Net只选其中2-10行
的查询语句中的Where条件怎么写?
SELECT * FROM [Sheet1$A2:E10]

#1


可能要引用EXCEL,workbooks("文件名")的属性中有

#2


我要循环得到每个Sheet中的数据,用纯ADO.net
不用Excel的Application对象

#3


用ADO.Net只选其中2-10行
的查询语句中的Where条件怎么写?



#4


下面是用VB6.0写的程序.


Dim oExcel As Excel.Application '定义一个excel的应用对象
Dim oBook As Excel.Workbook     '定义一个工作表
'要使用上面的两个对象必须在工程中引用excel的动态库.
Dim i As Long
      
    set oExcel = new Excel.Application 
        
    If chkHavePassword.Value Then
    '上面是判断一个check控件的值,决定要打开的excel是否有密码.
        
        sOpenUser = Trim(txtUser.Text)
        '密码一般有两个,读密码和写密码.
        '分别拿到
        sRPassword = Trim(txtReadPassword.Text)
        sWPassword = Trim(txtWritePassword.Text)
        '调用工作表的.open方法打开指定的文件,最重要的就是参数了.
        '不过我想仔细看一下还是不难理解的,注意顺序和位置就可以了.
        Set oBook = oExcel.Workbooks.Open(sFullFileName, , , , sRPassword, sWPassword)
        '打开后你就可以直接操作这个文件了.
        '下面的用法是把它另存到一个文件里,这是为了我操作方便而写的,我要用ADO直接打开这个文件,
        '而ADO是不能直接打开带密码的文件,所以我另存到一个新文件中,然后再打开新的文件.
        '后面的操作就看你怎么用了.这个我就不多说了.
        
        oBook.SaveAs GetWindowsTempPath & "SaveAs.xls", , "", ""
        sFullFileName = GetWindowsTempPath & "SaveAs.xls"
    Else
        Set oBook = oExcel.Workbooks.Open(sFullFileName)
    End If
   
   
    'oBook.Sheets.count 是总数
   
    For i = 1 To oBook.Sheets.Count
        '这就是你要的工作表名.
        lstSheet.AddItem oBook.Sheets.Item(i).Name
    Next
    If lstSheet.ListCount > 0 Then lstSheet.ListIndex = 0

    '最后实用结束时一定要把两个对象关闭并退出,不然会在内存中注留下来,这是不好的.
    oBook.Close
    
    oExcel.Quit

End Function

#5


用ADO.Net只选其中2-10行
的查询语句中的Where条件怎么写?
SELECT * FROM [Sheet1$A2:E10]