2010-12-31 13 views
5

Ho letto un po 'dei thread correlati, ma mi ha lasciato ancora questa domanda. Voglio scrivere una funzione in un'applicazione di database Access per importare a livello di codice i dati di Excel che iniziano prima delle prime due righe, ovvero l'intestazione ei delimitatori di unità.Come posso importare a livello di codice i dati di Excel in una tabella di accesso?

Sto cercando di realizzare le seguenti cose:

  • Essere in grado di selezionare dinamicamente il file di Excel Sto cercando di importare, magari utilizzando una finestra di dialogo e, forse, una finestra del browser di file.
  • Inserire i dati "comuni" in ogni riga durante l'importazione, come il numero di inventario del registratore e la posizione designata del registratore.
  • Avvia l'importazione alla riga n. 3, invece della riga n. 1, poiché il dispositivo inserisce automaticamente l'intestazione e le informazioni di unità di misura per il record.
  • Ignora tutte le altre colonne nel foglio di lavoro: i dati saranno SEMPRE sempre presenti nelle colonne da A a G e i dati inizieranno SEMPRE sulla riga # 3.

Questo è come i dati di Excel è comunemente formattato (i trattini rappresentano i dati):

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

Ho provato la funzione built-in di accesso 'Carica dati esterni', ma ha vinto' t saltare la riga n. 2 ei dati aggiuntivi nel file Excel generano un errore durante il tentativo di importazione, interrompendo il processo nelle relative tracce.

Sarò il primo ad ammettere che non ho mai provato a scrivere una funzione di importazione per Access prima di utilizzare file esterni, quindi sono un po 'un principiante. Qualsiasi aiuto che la gente possa mostrarmi sarà sempre molto apprezzato, e posso aggiornarlo con il codice tentato, se necessario. Grazie in anticipo per tutto il vostro aiuto, a tutti!

- A cura 01/03/2011 @ 10:41 -

Dopo aver letto la connessione ADO alla discussione dei dati di Excel proposto da Remou, qui è un codice Penso potrebbe fare il lavoro, ma Non sono sicuro.

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 

risposta

6

È possibile utilizzare 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" 

oppure si può connect to Excel with an ADO connection.

Potrebbe essere più semplice importare o collegare e quindi utilizzare una query per aggiornare la tabella pertinente con i dati del foglio di calcolo e i dati comuni.

+0

Il problema che la soluzione di cui sopra ha è che avrei bisogno di conoscere in anticipo la gamma dei dati, e in realtà dipende da quanto questo dispositivo attira durante i suoi compiti di registrazione dei dati. Daro 'un'occhiata a questo quando torno in ufficio domani - e vedere se potrei fornire più informazioni. –

+0

È sempre possibile connettersi tramite l'automazione e ottenere l'intervallo, anche se rallenterà un po 'le cose. – Fionnuala

+0

Ho pubblicato una dichiarazione di prova sopra, modificata al mio post precedente. Era questo quello che avevi in ​​mente? –

Problemi correlati