Importar datos a Excel desde Word

cgcamal

Active Member
Joined
May 2, 2007
Messages
472
Saludos a todos,

Tengo muchos archivos de MS Word que contienen ciertos datos que están bajo un título. La situación es que quisiera extraer esos datos y pegarlos organizadamente en una hoja de Excel.

Si son N libros de MS-Word, serían N filas en Excel. Y si son M datos que quiero extraer de cada libro de MS-Word, serían M columnas en Excel.


Alguien me puede dar una ayuda de cómo importar esto desde Excel.

Muchas gracias de antemano.
 

Excel Facts

Can you sort left to right?
To sort left-to-right, use the Sort dialog box. Click Options. Choose "Sort left to right"
Hola cgcamal,

No es que no habia visto su pregunta sino que no sé como responder. No sé casi nada de documentos Word en términos de programación. Sé que hay un objeto que se llama "bookmark" pero la verdad es que decir eso es como decir «sé que algo que se llama celda en Excel» o sea no ayuda mucho.

Creo que será más eficiente buscar ayuda en un foro de Word primero para ver si usted puede escribir un macro en Word que es capáz de agarrar los datos deseados y por lo menos mostrar los con un debug.print o msgbox. Ya una vez de que pueda hacer eso podemos ver cómo integrar con Excel.

Saludos,
 
Upvote 0
Muchas gracias por responder entonces Greg, con la última ayuda en la última pregunta que yo había hecho te quedé pendiente poque aún no me ha dado oportunidad para poder probar tus consejos, mi horario de trabajo me lo dificulta.

Con relación a la macro de Word, he estado buscando foros similares a este de Mr Excel, pero todavía no consigo lo requerido. Sólo algunos ejemplos aislados. He estado tratando de hacer como en Excel, tratando de grabar macros para ver qué código guarda y optar por modificarlo solamente, pero no es igual. Al mmento de grabar macro, Word no me deja
hacer todo lo que quisiera como lo hace Excel.

Bueno, seguiré buscando por ahí. Muchas gracias de nuevo.

Saludos cordiales. :)
 
Upvote 0
Hola cgcamal,

¿Cómo se organizan los datos del MS-Word? ¿Si los datos están en tablas, cuántas tablas en cada documento? ¿Están todos los archivos en la misma carpeta? ¿Usted quisiera que todos los datos fueran puestos en una libro de trabajo u hoja de trabajo o en muchos?
 
Upvote 0
Hola Macropod,
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:eek:ffice:eek:ffice" /><o:p></o:p>
<o:p></o:p>
Los libros de MS-Word contienen en promedio unas 10 páginas con variada información circundada por marcos o puesta dentro de pequeñas tablas.<o:p></o:p>
<o:p></o:p>
Pero yo sólo necesito extraer datos que están contenidos en una tabla, como la que muestro abajo, y la macro debería ser capaz de buscar las palabras “Código de país” o la abreviatura (CP) y copiar en la celda A2 de una hoja de Excel el valor numérico del código (504 en este caso). Buscar “número de Tel” o (NDT) y pegar en B2 los valores de NDT separados por coma si hay más de uno, 12345678, 87654321, …etc. Y así sucesivamente buscar NDC, NDV, NP y NH y colocar los valores numéricos que están inmediatamente debajo de esa abreviaturas en las celdas C2, D2, E2 y F2.

El número de tablas o texto que tiene marcos alrededor es en promedio 21 ó 25, dependiendo la información contenida. Los archivos de Word están en el mismo directorio y los datos organizados deberían quedar en una misma hoja de Excel, donde el número de líneas generadas en la hoja de Excel debería ser igual al número de archivos de Word desde donde se deberían extraer los 6 campos mencionados arriba.

Ejemplo de marco de Word donde está la información:
y1pemdNZ-wjTTvY8n0m3jErWo27YSsSaLpLIQqIi5w7KuNcbOBrKoGu8wc63OjCKA75


Hoja de Excel como desearía organizar la información:

y1pRUE7LeeGoZrsUidZZ1osjKTO7dgrtxrYT0Juuyd0j7T_DdVEEiszVu7ebFH0gHmY


Muchas gracias de antemano, y a ver si es posible que me den una idea de cómo hacer esto.

Saludos cordiales,
 
Upvote 0
Hola cgcamal,

¿Con las tablas en MS-Word, cómo los datos para el NDT se separan? ¿Con párrafos o lengüetas? ¿Es usted que usa un archivo existente de MS-Excel, o usted necesita un nuevo?

Respetos
 
Upvote 0
Macropod,

Los marcos o tablas están separados a veces por pequeños párrafos y porque la página cambia, pero
también algunas veces aparecen una tabla o marco después de otro, no hay estándar para esto. Los valores numéricos de los campos(CP, NDT, NDC, NDV, NP y NH) que deseo poder extraer no tienen ningún formato especial de separación, mas que límite de la línea vertical y horizontal que los circunda.Pero los valores numéricos debajo de NDT y NDV podrían ser más de uno dentro del espacio que los limita y están separados sólo por el renglón dentro de un mismo cuadrito como se ve en la figura. Por facilidad si hay más de un valor numérico para NDT y NDV se presentarían en una misma
celda separados por coma al pasarlos a la hoja de Excel.

Con respecto a la otra pregunta, los datos pueden ser ordenados en cualquier libro nuevo, podríamos
decir Datos organizados.xls.
Esperando no se complique mucho.

Gracias de antemano.
 
Upvote 0
Hola cgcamal,

La macro siguiente trabaja para mí, pero no sé mucho el español (soy australiano) o si el vba un de los necesita ser traducido.

Code:
Option Explicit
Dim i As Integer
Dim Datos()

Function ConsigaCarpeta(Optional Title As String, Optional RootFolder As Variant) As String
On Error Resume Next
ConsigaCarpeta = CreateObject("Shell.Application").BrowseForFolder(0, Title, 0, RootFolder).Items.Item.Path
End Function

Sub EncuentreDocumentos()
Dim fs
Dim x As Integer
Dim StrDoc As String
Set fs = Application.FileSearch
With fs
  On Error GoTo Abort
  .LookIn = ConsigaCarpeta(Title:="Seleccione por favor una carpeta", RootFolder:=&H400) ' o &H11
  .FileName = "*.doc"
  If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
    MsgBox .FoundFiles.Count & " documentos fueron encontrados."
    i = 1
    ReDim Datos(6, i)
    Datos(1, i) = "CP"
    Datos(2, i) = "NDT"
    Datos(3, i) = "NDC"
    Datos(4, i) = "NDV"
    Datos(5, i) = "NP"
    Datos(6, i) = "NH"
    For x = 1 To .FoundFiles.Count
      StrDoc = .FoundFiles.Item(x)
      Documents.Open FileName:=StrDoc
        Call ConsigaDatos
        With Documents.Item(StrDoc)
          .Saved = True
          .Close
        End With
    Next x
    Call EscribaDatos
  Else
    MsgBox "0 documentos fueron encontrados."
  End If
End With
Abort:
End Sub

Private Sub ConsigaDatos()
Dim oDoc As Document
Dim oTbl As Table
Dim oCel As Cell
Dim oRng As Range
For Each oTbl In ActiveDocument.Tables
  For Each oCel In oTbl.Range.Cells
    If InStr(oCel.Range.Text, "(CP)") > 0 Then
      i = i + 1
      ReDim Preserve Datos(6, i)
      Set oRng = oTbl.Cell(oCel.RowIndex + 1, oCel.ColumnIndex).Range
      oRng.End = oRng.End - 1
      Datos(1, i) = Replace(Replace(Replace(Trim(oRng.Text), vbCr, ","), vbTab, " "), ",,", ",")
    End If
    If InStr(oCel.Range.Text, "(NDT)") > 0 Then
      Set oRng = oTbl.Cell(oCel.RowIndex + 1, oCel.ColumnIndex).Range
      oRng.End = oRng.End - 1
      Datos(2, i) = Replace(Replace(Replace(Trim(oRng.Text), vbCr, ","), vbTab, " "), ",,", ",")
    End If
    If InStr(oCel.Range.Text, "(NDC)") > 0 Then
      Set oRng = oTbl.Cell(oCel.RowIndex + 1, oCel.ColumnIndex).Range
      oRng.End = oRng.End - 1
      Datos(3, i) = Replace(Replace(Replace(Trim(oRng.Text), vbCr, ","), vbTab, " "), ",,", ",")
    End If
    If InStr(oCel.Range.Text, "(NDV)") > 0 Then
      Set oRng = oTbl.Cell(oCel.RowIndex + 1, oCel.ColumnIndex).Range
      oRng.End = oRng.End - 1
      Datos(4, i) = Replace(Replace(Replace(Trim(oRng.Text), vbCr, ","), vbTab, " "), ",,", ",")
    End If
    If InStr(oCel.Range.Text, "(NP)") > 0 Then
      Set oRng = oTbl.Cell(oCel.RowIndex + 1, oCel.ColumnIndex).Range
      oRng.End = oRng.End - 1
      Datos(5, i) = Replace(Replace(Replace(Trim(oRng.Text), vbCr, ","), vbTab, " "), ",,", ",")
    End If
    If InStr(oCel.Range.Text, "(NH)") > 0 Then
      Set oRng = oTbl.Cell(oCel.RowIndex + 1, oCel.ColumnIndex).Range
      oRng.End = oRng.End - 1
      Datos(6, i) = Replace(Replace(Replace(Trim(oRng.Text), vbCr, ","), vbTab, " "), ",,", ",")
    End If
  Next oCel
Next oTbl
MsgBox "Hello"
End Sub

Private Sub EscribaDatos()
Dim xlApp As Object, xlLibro As Object, xlHoja As Object
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If xlApp Is Nothing Then Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlLibro = xlApp.WorkBooks.Add
Set xlHoja = xlLibro.Sheets(1)
Dim j As Integer
Dim k As Integer
For j = 1 To i
  For k = 1 To 6
    xlHoja.Cells(j, k) = Datos(k, j)
  Next k
Next j
End Sub
Respetos
 
Upvote 0
Saludos Macropod,

Tengo 2 preguntas referentes al código.

1-)Veo que son 3 macros distintas, y según el código que logro identificar
las primeras dos debo insertarlas en un módulo de VBA en MS-Word, pero la tercera sería en un módulo de Excel. ¿Es correcto?

1-EncuentreDocumentos()-->Macro en modulo de MS-Word
2-ConsigaDatos()-->Macro en modulo de MS-Word
3-EscribaDatos()-->Macro en modulo de MS-Excel

2-) Al querer probar paso a paso la primera macro con F8, me da error en el código y me apunta hacia la línea "Set fs = Application.FileSearch" al parecer FileSearch no está disponible, yo uso MS Office 2007.

Gracias de nuevo.
 
Upvote 0
Hola cgcamal,

Las 3 macros están para el MS-Word. Parece que Application.FileSearch ha estado quebrado con Windows Vista. Veré si puedo encontrar el algo más para que usted utilice.

Tengo que ahora salir, así que tardará una cierta hora.

Respetos
 
Upvote 0

Forum statistics

Threads
1,216,182
Messages
6,129,358
Members
449,506
Latest member
nomvula

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top