2010-12-31 6 views
5

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

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

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

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

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

Я пробовал встроенный в Access «Внешние данные» функцию, но выиграл» t пропустить за строку №2, а дополнительные данные в файле Excel вызывают ошибку при попытке импорта, останавливая процесс на своих дорожках.

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

- ред 01/03/2011 @ 10:41 -

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

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 

ответ

6

Вы можете использовать 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" 

Или вы можете connect to Excel with an ADO connection.

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

+0

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

+0

Всегда можно подключиться через автоматизацию и получить диапазон, хотя это немного замедлит работу. – Fionnuala

+0

Я опубликовал тестовое заявление выше, с поправками к моему предыдущему сообщению. Это вы имели в виду? –

Смежные вопросы