powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить список листов Excel через ADODB
3 сообщений из 3, страница 1 из 1
Получить список листов Excel через ADODB
    #32734280
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно импортировать данные из Экселя в Акцесс. Уже имеется вполне работоспособная процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub Command2_Click()
    Dim fname As String
    fname = GetExcelFileName(Me.Hwnd)
    If fname = "" Then Exit Sub
    
    Dim Cnn As ADODB.Connection
    Dim rS As ADODB.Recordset
    
    Set Cnn = New ADODB.Connection
    Set rS = New ADODB.Recordset
    
    Cnn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & fname & ";ReadOnly=1"
    rS.Open "SELECT * FROM [1$];", Cnn, adOpenStatic, adLockReadOnly

 '   blablabla 

    rS.Close
    Cnn.Close
End Sub
Дополнительно нужно запрашивать у юзера, с какой страницы он желает делать импорт; имя этой страницы подставлю в запрос в строке rS.open
Одна проблемка - я не знаю как получить список существующих страниц в книге.

Использовать код типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    Dim myOlApp As Object
    Dim MyWo As Excel.Workbook
    Dim mysheet As Excel.Worksheet
    Set myOlApp = CreateObject("excel.Application")
    Set MyWo = myOlApp.Workbooks.Open(fname)
    For Each mysheet In MyWo.Worksheets
        Debug.Print mysheet.Name
    Next mysheet
я не хочу, чтобы не подключать в референсах на всех клиентах Excel library, т.е. желательно использование только АДОДБ
...
Рейтинг: 0 / 0
Получить список листов Excel через ADODB
    #32734319
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эврика!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
    Cnn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & fname & ";ReadOnly=1"
    
    Set rS = Cnn.OpenSchema(adSchemaTables)

    Do While Not rS.EOF
        Debug.Print rS("TABLE_NAME")
        rS.MoveNext
    Loop

    rS.Close
...
...
Рейтинг: 0 / 0
Получить список листов Excel через ADODB
    #32734465
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточненный код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
    Cnn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & fname & ";ReadOnly=1"
    
    Dim tn As String
    Set rS = Cnn.OpenSchema(adSchemaTables)
    Do While Not rS.EOF
        tn = rS("TABLE_NAME")
        If Left(tn,  1 ) = "'" Then tn = Mid(tn,  2 )
        If Len(tn) < InStr( 1 , tn, "$") +  2  Then
            tn = Left(tn, InStr( 1 , tn, "$"))
            Debug.Print tn
        End If
        rS.MoveNext
    Loop
    rS.Close
...
Условия связаны с тем, что имена листов, которые начинаются с цифры, возвращаются в апострофах. Кроме того, вместе со списком реальных таблиц возвращаются псевдотаблицы с именами типа '1$'Print_Area. Причем, я почти уверен, в зависимости от локализации Офиса, Print_Area будет заменяться на локализованную подстроку типа Область_Печати. Кому не лень, плз, проверьте. И если возникнут еще условия, буду рад их увидеть.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить список листов Excel через ADODB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]