Как пропустить первые несколько строк в Excel при импорте данных в Access? - PullRequest
0 голосов
/ 23 июня 2019

Я очень новичок в Access 2016 VBA и импортирую данные Excel в таблицу Access.

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

Вот код, который я использую для импорта данных Excel в таблицу:

DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True

И еще одна вещь: невозможно указать диапазон ячеек Excel, так как он варьируется.

Ответы [ 3 ]

0 голосов
/ 24 июня 2019
  • Для таких обходных путей я использовал удаление первых трех строк в файле Excel. Вы можете записать макрос в Excel, а затем вызвать предварительную обработку перед импортом файла в Access.

  • Другой вариант - использовать именованные диапазоны, вы можете импортировать их непосредственно в Access.

  • И наиболее подходящим решением для вас является использование DoCmd.Transferspreadsheet Спецификация диапазона, как описано здесь - https://docs.microsoft.com/ru-ru/office/vba/api/access.docmd.transferspreadsheet

DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4:G12"

В этом случае вы должны импортировать указанный диапазон, например, с 4-го ряда по 12-й .

Некоторые недостатки:

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

Если вы ВСЕГДА хотите, чтобы первые три строки были пропущены, вы можете просто изменить начальные позиции на DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4", а затем использовать приведенный ниже код для ввода всех входных данных, пока не дойдете до пустой ячейки.

DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4"
'first line checks if this cell is empty or not
Do While xlc.Value <> ""
    'takes the value of the current cell
    WO_Num(lngColumn) = xlc.Offset(0, 0).Value
    'shifts the selected cells one row downwards
    Set xlc = xlc.Offset(1, 0)
    lngColumn= lngColumn + 1 
Loop
0 голосов
/ 23 июня 2019

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

Вы можете полагаться только на порядок записей, возвращаемых запросом, когда порядок строго определен с включением предложения order by.

Поэтому, если вы хотите продолжать использовать метод TransferSpreadsheet для своей задачи, вам нужно будет определить метод определения записей, которые следует исключить, который не зависит от порядка импортируемых записей. Таким образом, вы можете импортировать все записи в вашу таблицу и затем выполнить запрос delete, реализующий логику идентификации записи в качестве критерия выбора.

Единственный другой способ добиться этого - взаимодействовать с рабочим листом Excel из MS Access с использованием ActiveX, выполнять итерацию по строкам в рабочем листе и заполнять набор записей, пропуская первые три встреченные строки.

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