2010-12-31 11 views
5

He leído un poco de los hilos relacionados, pero aún así me dejó esta pregunta. Quiero escribir una función en una aplicación de base de datos de Access para importar de manera programática los datos de Excel comenzando antes de las primeras dos filas, que son el encabezado y los delimitadores de la unidad.¿Cómo puedo importar datos de Excel mediante programación en una tabla de acceso?

Estoy buscando para llevar a cabo las siguientes cosas:

  • Ser capaz de seleccionar dinámicamente el archivo de Excel Busco para importar, tal vez mediante un cuadro de diálogo y tal vez una ventana del explorador de archivos.
  • Inserte datos 'comunes' en cada fila a medida que se importan, como el número de activo de la grabadora y la ubicación designada de la grabadora.
  • Comience la importación en la fila n. ° 3, en lugar de la fila n. ° 1, ya que el dispositivo coloca automáticamente la información del encabezado y la unidad de medida para el registro allí arriba.
  • Ignore todas las otras columnas de la hoja de trabajo: los datos SIEMPRE estarán presentes en las columnas A a G, y los datos SIEMPRE comenzarán en la fila 3.

Esta es la forma en que los datos de Excel es comúnmente formateado (los guiones representan los datos):

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

He probado la función 'Obtener datos externos' acceso incorporado, pero gané' t omite más allá de la fila # 2 y los datos adicionales en el archivo Excel arrojan un error al intentar importar, deteniendo el proceso en sus pistas.

Seré el primero en admitir que nunca he intentado escribir una función de importación para Access antes de usar archivos externos, por lo tanto, soy un poco novato. Cualquier ayuda que la gente pueda mostrarme siempre será muy apreciada, y puedo actualizarla con el código intentado según sea necesario. ¡Gracias de antemano por toda su ayuda, a todos!

- Editado 01/03/2011 @ 10:41 -

Después de leer el hilo de conexión ADO a datos de Excel propuesto por Remou, Aquí hay un código Creo fuerza hacer el trabajo, pero No estoy seguro.

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 

Respuesta

6

Puede utilizar TransferirHojaCálculo: http://msdn.microsoft.com/en-us/library/aa220766(v=office.11).aspx

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

o puede hacer connect to Excel with an ADO connection.

Puede ser más simple importar o vincular y luego usar una consulta para actualizar la tabla relevante con los datos de la hoja de cálculo y los datos comunes.

+0

El problema que tiene la solución anterior es que tendré que saber de antemano el rango de los datos, y realmente depende de cuánto este dispositivo ingrese durante las tareas de registro de datos. Echaré un vistazo a esto cuando regrese a la oficina mañana, y veré si puedo proporcionar más información. –

+0

Siempre es posible conectarse a través de la automatización y obtener el rango, aunque se ralentizará un poco. – Fionnuala

+0

He publicado una declaración de prueba arriba, modificada a mi publicación anterior. ¿Era esto lo que tenías en mente? –

Cuestiones relacionadas