2011-11-15 33 views
6

Cái này có lẽ hơi ngu ngốc, nhưng tôi thực sự cần nó. Tôi có tài liệu với 5 bảng mỗi bảng có một tiêu đề. tiêu đề là một văn bản thông thường không có kiểu dáng đặc biệt, không có gì. Tôi cần trích xuất dữ liệu từ các đầu bảng + dấu cộng đó. Hiện nay, sử dụng MS interop tôi đã có thể lặp qua từng tế bào của mỗi bảng sử dụng một cái gì đó như thế này:Nhận văn bản trên bảng MS Word

app.Tables[1].Cell(2, 2).Range.Text; 

Nhưng bây giờ tôi đang gặp khó khăn về cố gắng tìm hiểu làm thế nào để có được những văn bản ngay trên bàn. Dưới đây là một ảnh chụp màn hình: enter image description here

Đối với bảng đầu tiên tôi cần phải nhận được "Tôi CẦN TEXT NÀY" và cho bảng secnd tôi cần phải nhận được: "Và một điều này cũng vui lòng"

Vì vậy, về cơ bản tôi cần cuối cùng đoạn trước mỗi bảng. Có bất cứ đề nghị nào cho việc làm như thế này hả?

Trả lời

3

Bạn có thể thử điều gì đó dọc theo các dòng này. Tôi so sánh các đoạn văn với ô đầu tiên của bảng và khi có một kết quả phù hợp, hãy lấy đoạn trước đó làm tiêu đề bảng. Tất nhiên điều này chỉ hoạt động nếu ô đầu tiên của bảng chứa một đoạn văn duy nhất sẽ không thể tìm thấy ở nơi khác trong tài liệu:

var tIndex = 1; 
var tCount = oDoc.Tables.Count; 
var tblData = oDoc.Tables[tIndex].Cell(1, 1).Range.Text; 
var pCount = oDoc.Paragraphs.Count; 
var prevPara = ""; 
for (var i = 1; i <= pCount; i++) { 
    var para = oDoc.Paragraphs[i]; 
    var paraData = para.Range.Text; 

    if (paraData == tblData) { 
     // this paragraph is at the beginning of the table, so grab previous paragraph 
     Console.WriteLine("Header: " + prevPara); 
     tIndex++; 
     if (tIndex <= tCount) 
      tblData = oDoc.Tables[tIndex].Cell(1, 1).Range.Text; 
     else 
      break; 
    } 
    prevPara = paraData; 
} 

Sample Output:

Header: I NEED THIS TEXT 

Header: AND THIS ONE also please 
+0

Cảm ơn rất nhiều sự giúp đỡ của bạn! Giải pháp của bạn đã cho tôi một ý tưởng về cách thực hiện điều này. Sau một thời gian, tôi đã tìm ra cách dễ dàng hơn để làm điều đó. Tôi sẽ đăng bài này như một câu trả lời. – user194076

9

Mellamokb trong câu trả lời của mình cho cho tôi một gợi ý và một ví dụ tốt về cách tìm kiếm trong các đoạn văn. Trong khi thực hiện giải pháp của mình, tôi bắt gặp chức năng "Trước" thực hiện chính xác những gì chúng tôi cần. Dưới đây là cách sử dụng:

wd.Tables[1].Cell(1, 1).Range.Previous(WdUnits.wdParagraph, 2).Text; 

Trước đó chấp nhận hai tham số. Đầu tiên - Đơn vị bạn muốn tìm từ danh sách này: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.wdunits.aspx và tham số thứ hai là số đơn vị bạn muốn đếm ngược. Trong trường hợp của tôi 2 đã làm việc. Có vẻ như nó phải là bởi vì nó là ngay trước khi bàn, nhưng với một, tôi có ký tự đặc biệt lạ: trông giống như chỉ số nữ.

+0

Tôi nghĩ googling cho "Làm thế nào để có được văn bản trên một bảng trong từ" sẽ hoàn toàn vô ích, nhưng tôi đã tuyệt vọng và tôi đã cố gắng. Điều này dẫn tôi đến một giải pháp. Cảm ơn! I C# với netoffice, bạn muốn sử dụng phương thức beforeSibling() trên bảng. – user1815201

+0

Câu trả lời tuyệt vời cảm ơn bạn rất nhiều! –

+0

Wow! lừa thực sự thông minh, nó hoạt động hoàn hảo –

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