2009-02-03 12 views
5

Sto cercando un modo per estrarre/raschiare dati da file di Word in un database. Le nostre procedure aziendali hanno il verbale delle riunioni con i clienti documentati in file MS Word, principalmente a causa della storia e dell'inerzia.Estrazione di dati da MS Word

Voglio essere in grado di estrarre gli elementi di azione da questi minuti di riunione in un database in modo che possiamo accedervi da un'interfaccia Web, trasformarli in attività e aggiornarli quando vengono completati.

che è il modo migliore per farlo:

  1. macro VBA da Word dentro per creare CSV e poi caricare il DB?
  2. Macro VBA in Word con connessione a DB (come connettersi a MySQL da VBA?)
  3. Script Python tramite win32com quindi caricare in DB?

L'ultimo è interessante per me poiché l'interfaccia web viene creata con Django, ma non ho mai utilizzato Win32com o provato Word di scripting da Python.

MODIFICA: Ho iniziato a estrarre il testo con VBA perché rende un po 'più facile gestire il modello a oggetti di Word. Tuttavia ho un problema: tutto il testo è in tabelle e quando estraggo le corde dalle CELLU che desidero, ottengo uno strano carattere piccolo alla fine di ogni stringa. Il mio codice è simile a:

sFile = "D:\temp\output.txt" 
fnum = FreeFile 
Open sFile For Output As #fnum 

num_rows = Application.ActiveDocument.Tables(2).Rows.Count 

For n = 1 To num_rows 
    Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text 
    Assign = Application.ActiveDocument.Tables(2).Cell(n, 3).Range.Text 
    Target = Application.ActiveDocument.Tables(2).Cell(n, 4).Range.Text 
    If Target = "" Then 
     ExportText = "" 
    Else 
     ExportText = Descr & Chr(44) & Assign & Chr(44) & _ 
      Target & Chr(13) & Chr(10) 
     Print #fnum, ExportText 
    End If 
Next n 

Close #fnum 

Che succede con la piccola scatola di caratteri di controllo? C'è qualche tipo di codice di carattere in arrivo da Word?

risposta

4

Word ha un piccolo marcatore che pone alla fine di ogni cella di testo in una tabella.

Viene utilizzato come un indicatore di fine paragrafo nei paragrafi: per memorizzare la formattazione per l'intero paragrafo.

basta usare la funzione di Sinistra() per mettere a nudo fuori, cioè

Left(Target, Len(Target)-1)) 

A proposito, invece di

num_rows = Application.ActiveDocument.Tables(2).Rows.Count 
For n = 1 To num_rows 
     Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text 

Prova questo:

For Each row in Application.ActiveDocument.Tables(2).Rows 
     Descr = row.Cells(2).Range.Text 
+0

Grazie Joel! Avevo capito che avrei potuto usare Left() per cancellare la fine del marker, ma non mi sembrava elegante. Inoltre, grazie per l'altro puntatore. Non sono un programmatore esperto e sicuramente non un guru VBA. –

0

Direi guardare le domande correlate a destra -> Il top one sembra avere alcune buone idee per percorrere la rotta di Python.

+0

La domanda "estrarre testo da file MS word in python" riguarda il funzionamento in un ambiente Linux. Strumenti come antiword non sono disponibili in Windows eccetto in cygwin, mentre questo poster è disposto a fare lo scripting COM di Word. –

+0

Se non hai niente di carino da dire ... Alcune delle risposte più votate a quella domanda non sono affatto specifiche per Linux. Immagino che tu abbia perso quelli. –

1

Beh, non ho mai scritto Word, ma è abbastanza facile fare cose semplici con win32com. Qualcosa di simile:

from win32com.client import Dispatch 
word = Dispatch('Word.Application') 
doc = word.Open('d:\\stuff\\myfile.doc') 
doc.SaveAs(FileName='d:\\stuff\\text\\myfile.txt', FileFormat=?) # not sure what to use for ? 

Questo non è testato, ma penso che qualcosa di simile sarà solo aprire il file e salvarlo come testo normale (condizione che si può trovare il fileformat a destra) - si potrebbe poi leggere il testo in pitone e manipolarlo da lì. Probabilmente c'è anche un modo per prendere direttamente il contenuto del file, ma non lo conosco di nascosto; la documentazione può essere difficile da trovare, ma se hai documenti VBA o esperienza, dovresti essere in grado di trasportarli.

Dai un'occhiata a questo post da un po 'di tempo fa: http://mail.python.org/pipermail/python-list/2002-October/168785.html Scorri verso il basso fino a COMTools.py; ci sono alcuni buoni esempi lì.

È anche possibile eseguire makepy.py (parte della distribuzione pythonwin) per generare "firme" Python per le funzioni COM disponibili, quindi esaminarle come una sorta di documentazione.

0

come risparmiare il file come xml. quindi usando python o qualcos'altro ed estraete i dati dalla parola e nel database.

1

si potrebbe usare Ufficio aperto. Può aprire file di parole e anche eseguire macro python.

0

È possibile salvare a livello di programmazione un documento di Word in formato HTML e importare le tabelle contenute in Access. Ciò richiede pochissimo sforzo.