excel vba - pasar - Extraiga datos del documento de Word en una Hoja de cálculo de Excel
pasar base de datos de word a excel (1)
aquí hay algún código que hace uso del enlace tardío (declarar objetos en lugar de word.application, etc.). Desde Excel 2003 ,
- abre un documento WORD
- busca la cadena "stock mínimo"
- mueve el cursor algunas líneas / palabras más allá
- expande / selecciona el cursor WORD
- pega esta selección WORD en EXCEL
los pasos 2-5 se repiten para "Período de informe:" (tenga en cuenta que ":" es un límite de palabra, por lo que tenemos que saltar 8 palabras a la derecha para llegar a la fecha)
Para WORD, copié el texto de su Q tal como está (sin tabla, solo texto sin formato). Si usa tablas en su lugar, puede que necesite jugar con las unidades de las distintas declaraciones de Move
(por ejemplo, para la unit:=12
celdas unit:=12
); la estrategia sigue siendo la misma: encuentre un texto constante, mueva el cursor al destino final, expanda la selección, cree un rango de palabras y transfiera.
Ambos elementos se colocan en la celda actual en Excel y su vecino de la derecha.
Sub GrabUsage()
Dim FName As String, FD As FileDialog
Dim WApp As Object, WDoc As Object, WDR As Object
Dim ExR As Range
Set ExR = Selection '' current location in Excel Sheet
''let''s select the WORD doc
Set FD = Application.FileDialog(msoFileDialogOpen)
FD.Show
If FD.SelectedItems.Count <> 0 Then
FName = FD.SelectedItems(1)
Else
Exit Sub
End If
'' open Word application and load doc
Set WApp = CreateObject("Word.Application")
'' WApp.Visible = True
Set WDoc = WApp.Documents.Open(FName)
'' go home and search
WApp.Selection.HomeKey Unit:=6
WApp.Selection.Find.ClearFormatting
WApp.Selection.Find.Execute "Minimum Stock"
'' move cursor from find to final data item
WApp.Selection.MoveDown Unit:=5, Count:=1
WApp.Selection.MoveRight Unit:=2, Count:=2
'' the miracle happens here
WApp.Selection.MoveRight Unit:=2, Count:=1, Extend:=1
'' grab and put into excel
Set WDR = WApp.Selection
ExR(1, 1) = WDR '' place at Excel cursor
''repeat
WApp.Selection.HomeKey Unit:=6
WApp.Selection.Find.ClearFormatting
WApp.Selection.Find.Execute "Period of Report:"
WApp.Selection.MoveRight Unit:=2, Count:=8
WApp.Selection.MoveRight Unit:=2, Count:=3, Extend:=1
Set WDR = WApp.Selection
ExR(1, 2) = WDR '' place in cell right of Excel cursor
WDoc.Close
WApp.Quit
End Sub
Puede crear un botón y llamar a ese sub desde allí, o vincular GrabUsage () a una tecla de función.
WApp.Visible = True
porque en producción no quiere que WORD aparezca, pero lo necesitará para depurar y jugar con los movimientos del cursor.
La desventaja de la vinculación tardía (y no utilizar referencias a la biblioteca de Word) es la codificación de unidades (6 = historia, 5 = línea, 2 = palabra) en lugar de utilizar enumeraciones de palabras, pero a veces obtengo bloqueos de SO con enlaces anticipados. .. no muy sexy, pero parece funcionar.
El objeto FileDialog necesita una referencia a la Biblioteca de Office de MS Office. AFAIK es estándar en Excel 2003, pero es mejor verificar que bloquear.
Y no incluí el código para verificar si los artículos realmente se encuentran; Dejo esto a tu creatividad.
Espero que ayude.
Tengo el requisito de extraer un valor de un documento de Word a diario y escribirlo en un libro de Excel. Actualmente hago esto manualmente y es frontera para el método más eficiente para mí
- Usando el archivo de Excel, cree un script vba y agregue cualquier referencia de documento de Word.
2 Usando la palabra navegue a la tabla "9. STOCKS ... "(extraje el ejemplo a continuación - Apéndice A) y lea el uso diario de Diesel (ltrs) resaltado en rojo.
3. Escribe este valor en una celda de hoja de cálculo.
- La fecha para este valor también es clave, pero se mantuvo en otra parte del documento de Word (Apéndice B). Las fechas también están en el nombre del archivo, pero confiamos más en el valor interno que en el nombre del documento. Con el conocimiento de los puntos 3 y 4, extraiga la fecha asociada a una celda de hoja de cálculo adyacente.
La tabla se muestra a continuación, debido al formato no puedo enviarle la tabla exacta pero podré enviar los valores de la misma.
9. ESTOCOS (A partir de las 00:01 horas del día del problema del informe). Stock Held Daily Useage Stock mínimo
Diesel (ltrs)
390436 15012 25000
Nitrógeno (mm)
35 1 19 Champion 1033 (totes)
15 1 4 Nexguard (Calderas) 4
0.25 4 x 200 ltrs
Apéndice B: Período de Beatrice del informe: 00:01 - 24:00 10 de agosto de 2010
Si tiene dudas con respecto a mi pregunta, por favor vuelva a contactarme, agradezco su esfuerzo y quiero agradecerle de antemano