2012-10-27 15 views
5

Word belgesine (2003) sahibim. Belgenin içeriğini ayrıştırmak için Powershell kullanıyorum. Belge, üstte birkaç satırlık metin, farklı sayıda sütun içeren bir düzine tablo ve daha sonra biraz daha metin içeriyor.Word belgesi (* .doc) içeriğini tablo vb. Ile okuyun.

  1. Oku belgesinde (vs gerekli nesneleri olun)
  2. metin
  3. her satırı bir tablo parçası olmayan ise alın:

    aşağıda gibi bir şey olarak belgeyi okuyabilecek olmasını bekliyoruz metin ve yaz-çıktı olarak süreç başka

  4. bir tablosunun parçası
  5. (emriyle)
  6. alın tablo numarası ve sütun dayalı çıkışını ayrıştırmak

Aşağıda yazmaya başlamışlardır Powershell script umns

  • sonu ise:

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

    Paragraflar istediğim buysa ben emin değilim. Amacım için daha uygun bir şey var mı? Şu anda tek alacağım bu belgenin tüm içeriği. Ne aldığımı nasıl kontrol ederim. Bir çizgi almak istediğim gibi, bir masanın bir parçası olup olmadığını belirleyebilir ve sayı tablosuna göre bir eylem gerçekleştirebilir.

  • +1

    Word belgeleri çizgilerle düzenlenen değildir. Lütfen bir adım geri atın ve çözüm olarak gördüğünüz şeyden ziyade çözmeye çalıştığınız sorunu açıklayın. –

    +0

    Elbette - yanıt verdiğiniz için teşekkürler ... Bu yüzden bir metin içeren ve yaklaşık 5 veya 6 tablo içeren bu kelime belgesine sahibim. Her tablonun 2'den 6'ya kadar değişen sayıda sütunları vardır. Her tabloda ilk satır, başlığı tanımlar. Yapmaya çalıştığım, belgeyi okumak için (Powershell kullanarak), bir Oracle veritabanına karşı ayrı olarak çalıştırılabilen tabloların ve çıkış sql deyimlerinin içeriğini ayrıştırmaktır. Artık birçok belgeye sahibim ve bunların her biri yapı bakımından benzer. Ancak her birinde tablolarda az veya çok satır olabilir. – Anoop

    cevap

    5

    Tabloları bir Word belgesinde Tables koleksiyonuyla numaralandırabilirsiniz. Rows ve Columns özellikleri, belirli bir tablodaki satır/sütun sayısını belirlemenize olanak tanır. Bireysel hücrelere Cell nesnesi üzerinden erişilebilir. belgede son sırada ve her bir tablonun son sütununda hücrenin değerini basacaktır

    Örnek:

    $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

    Çok teşekkür ederim. Ama bir sorum var - tabloyla ilgili mantığı aramak için bir masanın içinde olduğumu nasıl bilebilirim? IsTable() yapısı var mı? – Anoop

    +0

    Soruyu anladığımdan emin değilim. 'Tables' koleksiyonunun belgedeki tüm tabloları vardır ve başka bir şey yoktur. Bu koleksiyondan bir nesneye eriştiğinizde, bu nesne bir tablodur. –

    +0

    hmm - Sanırım ne dediğini anlıyorum. Bir tablo olup olmadığına bakılmaksızın, tüm metni sıralı bir şekilde okumaya çalışıyordum - ve eğer bir masa o zaman tablo mantığını aramak istedim. Ama öyle yapmam gerekmiyor. Tablo koleksiyonunu kullanmak daha temiz görünüyor. Çok teşekkür ederim. – Anoop

    İlgili konular