Extrair dados do documento Word para uma planilha Excel

Eu tenho um requisito para extrair um valor de um documento do word em uma base diária e escrevê-lo em um livro do excel. Eu atualmente faço isso manualmente e é linha de fronteira em relação ao método mais eficiente para mim

  1. Usando o ficheiro Excel crie um programa vba e adicione todas as referências do documento word.

2 Usando a palavra navegar para a tabela " 9. STOCK..."(exemplo extraído abaixo-Apêndice A) e ler o Diesel (ltrs) uso diário destacado em vermelho.

3.Escreva este valor numa célula de folha de cálculo.

  1. a data para este valor é também a chave, mas que se encontra noutra parte do documento word (Apêndice B). As datas também estão no nome do arquivo, mas confiamos no valor interno mais do que o nome do documento do word. Com conhecimento dos pontos 3 e 4, extrair a data associada para uma célula de folha de cálculo adjacente.

a tabela é mostrada abaixo, por causa da formatação eu não sou capaz de enviar-lhe a tabela exata, mas eu vou ser capaz para enviar os seus valores.

9.Existências (a partir das 00:01 hrs no Dia da publicação do relatório). Unidade Populacional Detida Utilização Diária Existências Mínimas

Diesel (ltrs)
390436 15012 25000

azoto (mm)
35 1 19 Campeão 1033 (totes) 15 1 4 Nexguard (Caldeiras) 4
0.25 4 x 200 ltrs

Apêndice B: Período de notificação Beatrice: 00: 01-24: 00 10 de agosto de 2010

Se tiver dúvidas sobre a minha pergunta, por favor, responda-me, agradeço os seus esforços e ... queria agradecer antecipadamente.
Author: Community, 2010-08-25

1 answers

Aqui está algum código fazendo uso de ligação tardia (declarar objetos em vez de palavra.aplicação etc). De Excel 2003 , It

  1. abre um documento do WORD
  2. procura pelo texto "stock mínimo"
  3. move o cursor algumas linhas / palavras ainda mais
  4. expande/selecciona a palavra cursor
  5. passa esta selecção de palavras para o EXCEL

Os passos 2-5 são repetidos para o " período de relato: "(note que o": "é um limite de palavra, por isso precisamos saltar 8 palavras para o direito de chegar à data)

Por palavra copiei o texto do teu Q tal como está (nenhuma tabela, apenas texto simples). Se usar as tabelas em vez disso, poderá ter de brincar com as unidades das várias declarações Move (por exemplo, para as células unit:=12); a estratégia mantém-se a mesma: encontrar um texto constante, mover o cursor para o destino final, expandir a selecção, criar um intervalo de palavras e transferir.

Ambos os itens são colocados na célula atual do Excel e seu vizinho direito.

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

Você pode criar um botão e chamar esse sub de lá, ou link GrabUsage() para uma tecla de função.

Eu comentei o WApp.Visible = True porque na produção você não quer que a palavra sequer apareça, mas você vai precisar dela para depurar e jogar com os movimentos do cursor.

A desvantagem da ligação tardia (e não Usando referências à biblioteca palavra) é o hardcoding de unidades (6 = História, 5 = linha, 2 = palavra)em vez de usar enumerações de palavras, mas às vezes eu tenho OS crashes com enlace .... não muito sexy, mas parece funcionar.

O objecto FileDialog necessita de uma referência à biblioteca do escritório do MS Office. AFAIK este é o padrão no Excel 2003, mas é melhor verificar do que bater.

E eu não incluí código para verificar se os itens são realmente encontrados; deixo isso para a sua criatividade.

Espero que isso ajude.
 6
Author: MikeD, 2010-08-31 18:00:44