2012-10-27 14 views
5

Ho un documento word (2003). Sto usando Powershell per analizzare il contenuto del documento. Il documento contiene alcune righe di testo in alto, una dozzina di tabelle con un numero diverso di colonne e quindi un po 'più di testo.Leggi contenuto documento word (* .doc) con tabelle ecc.

mi aspetto di essere in grado di leggere il documento come qualcosa di simile al seguito:

  1. Leggi documento (rendere gli oggetti necessari, ecc)
  2. ottenere ogni riga di testo
  3. Se non parte di una tabella , processo di uscita dalla scrittura del testo e
  4. altro
  5. Se parte di una tabella
  6. numero di tabella
  7. Get (in ordine) e analizzare l'output sulla base di Col umns
  8. fine se

Di seguito è lo script PowerShell che ho cominciato a scrivere:

$objWord = New-Object -Com Word.Application 
$objWord.Visible = $false 
$objDocument = $objWord.Documents.Open($filename) 
$paras = $objDocument.Paragraphs 
foreach ($para in $paras) 
{ 
    Write-Output $para.Range.Text 
} 

Io non sono sicuro se i paragrafi è quello che voglio. C'è qualcosa di più adatto al mio scopo? Tutto quello che sto ottenendo ora è l'intero contenuto del documento. Come controllo ciò che ottengo. Come se volessi ottenere una linea, essere in grado di determinare se fa parte di una tabella o meno e intraprendere un'azione in base a quale tabella numeri è.

+1

documenti di Word non sono organizzati in linee. Per favore fai un passo indietro e descrivi il problema che stai cercando di risolvere piuttosto che ciò che percepisci come la soluzione. –

+0

Certo - grazie per aver risposto ... Quindi ho questo documento word che contiene del testo e circa 5 o 6 tabelle. Ogni tabella ha un numero variabile di colonne da 2 a 6. La prima riga di ogni tabella descrive l'intestazione. Quello che sto cercando di realizzare è (usando Powershell) per leggere il documento, analizzare il contenuto delle tabelle e produrre istruzioni SQL che possono essere eseguite separatamente su un database Oracle. Ora ho molti di questi documenti e ognuno di loro ha una struttura simile. Ma ognuno può avere più o meno righe nelle tabelle. – Anoop

risposta

5

È possibile enumerare le tabelle in un documento di Word tramite la raccolta Tables. Le proprietà Rows e Columns consentiranno di determinare il numero di righe/colonne in una determinata tabella. È possibile accedere a singole celle tramite l'oggetto Cell.

Esempio che stamperà il valore della cella dell'ultima riga e nell'ultima colonna della tabella del documento:

$wd = New-Object -ComObject Word.Application 
$wd.Visible = $true 
$doc = $wd.Documents.Open($filename) 
$doc.Tables | ForEach-Object { 
    $_.Cell($_.Rows.Count, $_.Columns.Count).Range.Text 
} 
+0

Grazie mille. Ma ho una domanda: come faccio a sapere che sono all'interno di un tavolo per chiamare la logica relativa alla tabella? Esiste un costrutto isTable()? – Anoop

+0

Non sono sicuro di aver compreso la domanda. La collezione 'Tabelle' ha tutte le tabelle nel documento e nient'altro. Quando accedi a un oggetto da quella raccolta, quell'oggetto è una tabella. –

+0

hmm - Penso di capire ora cosa hai detto. Stavo cercando di leggere tutto il testo in modo sequenziale, indipendentemente dal fatto che si tratti di una tabella o meno - e se si tratta di una tabella, volevo chiamare la logica della tabella. Ma non ho bisogno di farlo in quel modo. Usare la collezione di tavoli sembra più pulito. Grazie mille. – Anoop

Problemi correlati