2012-10-27 5 views
5

Ich habe ein Word-Dokument (2003). Ich verwende Powershell, um den Inhalt des Dokuments zu analysieren. Das Dokument enthält oben ein paar Zeilen Text, ein Dutzend Tabellen mit unterschiedlicher Anzahl von Spalten und dann etwas mehr Text.Lesen Sie Word-Dokument (* .doc) Inhalt mit Tabellen usw.

Ich erwarte, dass das Dokument als so etwas wie die unten in der Lage sein zu lesen:

  1. Dokument lesen (erforderlich machen, Objekte usw.)
  2. jede Textzeile Get
  3. Wenn nicht Teil einer Tabelle , Prozess als Text und Write-Output
  4. sonst
  5. Wenn ein Teil einer Tabelle
  6. Get Tabellennummer (im Auftrag) und Ausgabe analysiert basierend auf col UMNS
  7. end if

Unten ist die Powershell-Skript, das ich angefangen habe zu schreiben:

$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 
} 

Ich bin nicht sicher, ob Absätze ist das, was ich will. Gibt es etwas, das besser zu meinem Zweck passt? Alles, was ich jetzt bekomme, ist der gesamte Inhalt des Dokuments. Wie kontrolliere ich, was ich bekomme? Wie ich eine Zeile erhalten möchte, kann ich feststellen, ob es Teil einer Tabelle ist oder nicht, und eine Aktion basierend auf der Nummerntabelle ausführen.

+1

Word-Dokumente sind nicht in Linien organisiert. Bitte machen Sie einen Schritt zurück und beschreiben Sie das Problem, das Sie lösen möchten und nicht das, was Sie als Lösung wahrnehmen. –

+0

Sicher - danke für die Antwort ... So habe ich dieses Word-Dokument, das etwas Text und etwa 5 oder 6 Tabellen enthält. Jede Tabelle hat eine variierende Anzahl von Spalten von 2 bis 6. Die erste Zeile in jeder Tabelle beschreibt den Header. Was ich versuche zu erreichen ist (mit Powershell), um das Dokument zu lesen, den Inhalt der Tabellen zu analysieren und SQL-Anweisungen auszugeben, die getrennt von einer Oracle-Datenbank ausgeführt werden können. Jetzt habe ich viele solche Dokumente und jeder von ihnen ist in der Struktur ähnlich. Aber jeder kann mehr oder weniger Zeilen in den Tabellen haben. – Anoop

Antwort

5

Sie können die Tabellen in einem Word-Dokument über die Tables-Auflistung auflisten. Mit den Eigenschaften Rows und Columns können Sie die Anzahl der Zeilen/Spalten in einer bestimmten Tabelle bestimmen. Auf einzelne Zellen kann über das Objekt Cell zugegriffen werden.

Beispiel, das den Wert der Zelle in der letzten Zeile und letzte Spalte jeder Tabelle in dem Dokument gedruckt wird:

$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

Vielen Dank. Aber ich habe eine Frage - woher weiß ich, dass ich in einer Tabelle bin, um die tabellenbezogene Logik aufzurufen? Gibt es ein isTable() Konstrukt? – Anoop

+0

Nicht sicher, ob ich die Frage verstehe. Die 'Tables'-Sammlung enthält alle Tabellen im Dokument und sonst nichts. Wenn Sie auf ein Objekt aus dieser Sammlung zugreifen, ist dieses Objekt eine Tabelle. –

+0

hmm - ich glaube ich verstehe jetzt was du gesagt hast. Ich habe versucht, den ganzen Text sequentiell zu lesen, egal ob es eine Tabelle ist oder nicht - und wenn es eine Tabelle war, dann wollte ich die Tabellenlogik aufrufen. Aber ich muss es nicht so machen. Die Tabellensammlung scheint sauberer zu sein. Vielen Dank. – Anoop

Verwandte Themen