Как программно импортировать данные Excel в таблицу Access? - PullRequest
5 голосов
/ 31 декабря 2010

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

Я хочу выполнить следующие действия:

  • Возможность динамического выбора файла Excel, который я хочу импортировать, возможно, с использованием диалогового окна и, возможно, окна браузера файлов.
  • Вставка «общих» данных в каждую строку при ее импорте -например, номер актива записывающего устройства и назначенное местоположение записывающего устройства.
  • Запустите импорт в строке № 3, а не в строке № 1, поскольку устройство автоматически помещает заголовок и информацию об единицах измерения для записи там..
  • Игнорировать все остальные столбцы на листе - данные ВСЕГДА будут присутствовать в столбцах с A по G, и данные ВСЕГДА начинаются со строки № 3.

Вот какДанные Excel обычно форматируются (штрихи представляют данные):

     Date     Time     Temp     Dew Point     Wet Bulb     GPP     RH
                       Cº       Cº            Cº           g/Kg    %
     ----     ----     ----     ----          ----         ----    ----
     ----     ----     ----     ----          ----         ----    ----

Я пробовал встроенный Access 'Get External Data', но она не пропускает строку # 2, и дополнительные данные в файле Excel выдают ошибку при попытке импорта, останавливая процесс в его дорожках.

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

- Отредактировано 03/03/2011 @ 10:41 am -

После прочтения соединения ADO с потоком данных Excel, предложенногоРему, вот код, который, я думаю, может справиться с работой, но я не уверен.

Dim rs2 As New ADODB.Recordset
Dim cnn2 As New ADODB.Connection
Dim cmd2 As New ADODB.Command
Dim intField As Integer
Dim strFile As String

strFile = fncOpenFile
If strFile = "" Then Exit Sub

With cnn2
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source='" & strFile & "'; " & "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"
    .Open
End With

Set cmd2.ActiveConnection = cnn2
cmd2.CommandType = adCmdText
cmd2.CommandText = "SELECT * FROM [Data$] WHERE G1 IS NOT NULL"
rs2.CursorLocation = adUseClient
rs2.CursorType = adOpenDynamic
rs2.LockType = adLockOptimistic

rs2.Open cmd2

1 Ответ

6 голосов
/ 31 декабря 2010

Вы можете использовать TransferSpreadsheet: http://msdn.microsoft.com/en-us/library/aa220766(v=office.11).aspx

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
    "Employees","C:\Data\Test.xls", True, "A3:G12"

Или вы можете подключиться к Excel через ADO-соединение .

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

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