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
- 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.
- 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.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
- abre um documento do WORD
- procura pelo texto "stock mínimo"
- move o cursor algumas linhas / palavras ainda mais
- expande/selecciona a palavra cursor
- 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.