2012-10-27 15 views
5

Tôi có tài liệu từ (2003). Tôi đang sử dụng Powershell để phân tích cú pháp nội dung của tài liệu. Tài liệu chứa một vài dòng văn bản ở trên cùng, một tá bảng với số lượng cột khác nhau và sau đó là một số văn bản khác.Đọc nội dung tài liệu từ (* .doc) với các bảng, v.v.

tôi mong đợi để có thể đọc các tài liệu như một cái gì đó giống như dưới đây:

  1. đọc tài liệu (làm cho đối tượng cần thiết vv)
  2. Get mỗi dòng văn bản
  3. Nếu không nằm trong một bảng , quá trình dưới dạng văn bản và Viết-Output
  4. khác
  5. Nếu một phần của một bảng
  6. số bảng
  7. Nhận (theo thứ tự) và phân tích đầu ra dựa trên col umns
  8. kết thúc nếu

Dưới đây là các kịch bản PowerShell mà tôi đã bắt đầu viết:

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

Tôi không chắc chắn nếu đoạn là những gì tôi muốn. Có điều gì phù hợp hơn cho mục đích của tôi không? Tất cả những gì tôi nhận được bây giờ là toàn bộ nội dung của tài liệu. Làm thế nào để kiểm soát những gì tôi nhận được. Giống như tôi muốn nhận được một dòng, có thể xác định xem nó là một phần của một bảng hay không và thực hiện một hành động dựa trên bảng số đó là gì.

+1

tài liệu Word không được tổ chức tại dòng. Vui lòng lùi lại một bước và mô tả sự cố bạn đang cố gắng giải quyết thay vì những gì bạn nhận thấy là giải pháp. –

+0

Chắc chắn - cảm ơn vì đã trả lời ... Vì vậy, tôi có tài liệu từ này có chứa một số văn bản và khoảng 5 hoặc 6 bảng. Mỗi bảng có một số cột khác nhau từ 2 đến 6. Hàng đầu tiên trong mỗi bảng mô tả tiêu đề. Điều tôi đang cố gắng thực hiện là (sử dụng Powershell) để đọc tài liệu, phân tích cú pháp nội dung của các bảng và các câu lệnh sql đầu ra có thể chạy riêng với cơ sở dữ liệu Oracle. Bây giờ tôi có nhiều tài liệu như vậy và mỗi tài liệu có cấu trúc tương tự nhau. Nhưng mỗi cái có thể có nhiều hoặc ít hàng trong các bảng. – Anoop

Trả lời

5

Bạn có thể liệt kê các bảng trong tài liệu Word qua bộ sưu tập Tables. Các thuộc tính RowsColumns sẽ cho phép bạn xác định số hàng/cột trong một bảng nhất định. Các ô riêng lẻ có thể được truy cập thông qua đối tượng Cell.

Ví dụ mà sẽ in giá trị của các tế bào ở hàng cuối cùng và cột cuối cùng của mỗi bảng trong tài liệu:

$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

Cảm ơn bạn rất nhiều. Nhưng tôi có một câu hỏi - làm thế nào để tôi biết tôi đang ở trong một bảng để gọi logic liên quan đến bảng? Có giống như một isTable() xây dựng? – Anoop

+0

Không chắc chắn nếu tôi hiểu câu hỏi. Bộ sưu tập 'Bảng' có tất cả các bảng trong tài liệu và không có gì khác. Khi bạn truy cập một đối tượng từ bộ sưu tập đó, đối tượng đó là một bảng. –

+0

hmm - Tôi nghĩ bây giờ tôi đã hiểu những gì bạn nói. Tôi đã cố gắng đọc tất cả các văn bản một cách tuần tự, bất kể đó là một bảng hay không - và nếu nó là một bảng thì tôi muốn gọi logic bảng. Nhưng tôi không cần phải làm theo cách đó. Sử dụng bộ sưu tập bảng có vẻ sạch hơn. Cảm ơn nhiều. – Anoop

Các vấn đề liên quan