Импортировать именную электронную таблицу Lotus123 в MS Access - PullRequest
0 голосов
/ 20 февраля 2020

Я нахожусь в процессе перемещения всех листов Lotus, которые есть у компании, на сервер SQL, и я использую таблицы MS Access в качестве посредника. Этот код работал нормально для листов, которые не названы, но я встречал около 2300 или около того листов, где он назван онемевшим. Слишком много файлов, чтобы я мог вручную изменить их все.

Ошибка, которую я получаю: Ошибка времени выполнения '-2147217865 (80040e37)': ядру базы данных Microsoft Jet не удалось найти объект "numb: A1..numb: A8000". Убедитесь, что объект существует, и что вы правильно написали его имя и путь.

Найден этот сайт, но он не дал ответа

Я видел различные варианты получения адресата прямо при вызове ADOB («SELECT * FROM [numb: A1..numb: A8000];» или («SELECT * FROM [numb $: A1..numb $: A8000];») и они не сработали.

Вот код функционирования, когда лист не назван:

Dim rst As DAO.Recordset
Dim rs As DAO.Recordset
Dim LotusCn As Object
Dim rsLotus As Object
'Read WK3 Lotus files
    repcode = rs![Code]
    Directory = rs![Directory]
    Directory = Directory & "NUMDATM.WK3"
    Set LotusCn = CreateObject("ADODB.Connection")
    Set rsLotus = CreateObject("ADODB.Recordset")
    'This creates the objects for the lotus connctions
    'below the connection string

   LotusCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & Directory & ";" & _
    "Extended Properties=Lotus WK3;Persist Security Info=False"
   strSQL = "SELECT * FROM  [A1..A8000];" 'The SQL to pick the right sections of the lotus file. Picks the Latest Available Date
    rsLotus.Open strSQL, LotusCn, adOpenStatic  '<<< ***Error occurs here***
    If Not (rsLotus.EOF And rsLotus.BOF) Then
        FindRecordCount = rsLotus.RecordCount
        rsLotus.MoveFirst
        Do Until rsLotus.EOF = True
            Debug.Print rsLotus.Fields(0).Value
            If Len(rsLotus.Fields(0).Value) > 0 Then
                rst.AddNew
                    rst!RegNo = rsLotus.Fields(0).Value
                rst.Update
            End If
        rsLotus.MoveNext
        Loop
    End If
    LotusCn.Close
    strSQL = ""
    Set rsLotus = Nothing
    Set LotusCn = Nothing

Кто-нибудь знает, как получить именованные электронные таблицы?

1 Ответ

0 голосов
/ 20 февраля 2020

Я не знаю точно, как в Lotus, но это было в Excel

Set oRs = oConn.OpenSchema(adSchemaTables) 'get the name of the sheet in Excel
                oRs.MoveFirst
                With oRs
                    While Not .EOF

                        If .fields("TABLE_TYPE") = "TABLE" Then
                            Debug.Print .fields("TABLE_NAME")

                            If VBA.Len(.fields("TABLE_NAME")) = 9 Then
                                WSnameTBL = .fields("TABLE_NAME")

                            Else
                            End If

                          '  WSnameTBL = VBA.Replace(WSnameTBL, "$", "", 1, , vbTextCompare)
                        End If
                    .MoveNext
                    Wend
                End With
...