Может ли Access прочитать содержимое файла Excel, не импортируя его в таблицу? - PullRequest
0 голосов
/ 15 июня 2019

Можно ли прочитать строку заголовка книги Excel, чтобы определить, существуют ли определенные поля перед импортом в таблицу? Я хотел бы получить уведомление, если эти определенные поля отсутствуют до импорта.

Моя база данных Access требует, чтобы пользователи импортировали данные из файлов Excel, сгенерированных другой системой, где пользователи могут выбирать поля для экспорта. Иногда пользователи случайно не выбирают определенные поля, необходимые для работы моей базы данных, что приводит к ошибкам, и тогда я получаю электронные письма. В настоящее время нет ошибок при импорте, если поля отсутствуют, что хорошо, потому что не все поля являются обязательными, только определенные.

Для справки, это код, который я использую для импорта прямо сейчас. Он работает нормально и делает то, что должен:

Private Sub ImportEDAS()
On Error GoTo SubError

    DoCmd.Hourglass True
    DoCmd.SetWarnings False

    If IsFile(Me.ImportFolder & "\perselection.xlsx") = True Then
        DoCmd.OpenQuery "qryClearEDAS"
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "tblEDAS", Me.ImportFolder & "\perselection.xlsx", True
        MsgBox DCount("*", "tblEDAS") & "Records Imported", vbInformation + vbOKOnly, "EDAS Import Status"
    Else
        MsgBox "Could not find perselection.xlsx in the import folder.", vbCritical + vbOKOnly, "EDAS Import Status"
    End If

SubExit:
On Error Resume Next
    DoCmd.Hourglass False
    DoCmd.SetWarnings True
    Exit Sub
SubError:
    MsgBox "Error Number: " & Err.Number & "- " & Err.Description, vbCritical + vbOKOnly, "ImportEdas Sub Error"
    Resume SubExit
End Sub

Ответы [ 3 ]

0 голосов
/ 15 июня 2019

Используйте

DoCmd.TransferSpreadsheet acLink, ..

и данные будут связаны. Связанную таблицу вы можете открыть как набор записей и прочитать имена полей, чтобы проверить их. Если все в порядке, выполните запрос на добавление для импорта данных.

0 голосов
/ 16 июня 2019

Вы можете создать запрос для поиска данных листа без открытия или связывания.

SELECT *
FROM [Sheet1$] IN 'C:\Path\to\File\ExcelFile.xlsx'[Excel 12.0;HDR=No;IMEX=0;];

Может использоваться с DAO и аналогичным с OLEDB .

0 голосов
/ 15 июня 2019

Хотя, безусловно, можно использовать VBA для чтения заголовков столбцов на листе Excel путем взаимодействия с Excel с использованием объектной модели ActiveX, более простой подход может быть следующим:

Импортируйте электронную таблицу Excel во временную таблицу в MS Access, а затем используйте VBA для перебора полей во вновь созданной таблице, проверяя наличие или отсутствие набора полей, который требуется для ваших запросов.

Чтобы проверить набор полей, присутствующих во временной таблице, вы можете использовать такую ​​функцию, как:

Function ValidateFields(strTbl As String, arrReq As Variant) As Boolean
    Dim fld
    Dim fldTmp As Field
    On Error GoTo err
    For Each fld In arrReq
        Set fldTmp = CurrentDb.TableDefs(strTbl).Fields(fld)
    Next fld
    ValidateFields = True
err:
    Exit Function
End Function

Поставляется с именем временной таблицы и массивом полей, которые вам необходимы для присутствия в такой таблице, вышеупомянутая функция вернет True, если присутствуют все поля в массиве, иначе False, если любое поле в массиве отсутствует в таблице, например:

?ValidateFields("TempTable", Array("Field1", "Field2", "Field3"))
False

Если ряд обязательных полей отсутствует, вы можете уведомить об этом пользователя соответствующим образом; иначе, если все обязательные поля присутствуют, вы можете вставить данные из обязательных полей в таблицу, используемую вашими запросами, используя простой запрос на добавление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...