2013-09-01 104 views
11


Tôi đang cố gắng đọc tài liệu từ bằng C#. Tôi có thể nhận được tất cả văn bản nhưng tôi muốn có thể đọc từng dònglưu trữ trong danh sách và liên kết với chế độ xem lưới. Hiện tại, mã của tôi trả về danh sách một mục chỉ với tất cả văn bản (không phải từng dòng theo mong muốn). Tôi đang sử dụng thư viện Microsoft.Office.Interop.Word để đọc tệp. Dưới đây là mã của tôi cho đến bây giờ:Đọc từ dòng tài liệu từ theo dòng

Application word = new Application(); 
    Document doc = new Document(); 

    object fileName = path; 
    // Define an object to pass to the API for missing parameters 
    object missing = System.Type.Missing; 
    doc = word.Documents.Open(ref fileName, 
      ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing); 

    String read = string.Empty; 
    List<string> data = new List<string>(); 
    foreach (Range tmpRange in doc.StoryRanges) 
    { 
     //read += tmpRange.Text + "<br>"; 
     data.Add(tmpRange.Text); 
    } 
    ((_Document)doc).Close(); 
    ((_Application)word).Quit(); 

    GridView1.DataSource = data; 
    GridView1.DataBind(); 
+0

Đây có phải là tất cả mã được liệt kê ở trên không. Tôi sẽ bắt đầu vào một dự án cuối tuần này sẽ đọc trong một tập tin từ và sau đó đưa ra tất cả các mã giữa hai quots và chèn một biến "A", ông nói. Sau đó, tôi phải thay thế một phần sau dấu phẩy bằng "A", B. cho một nhà văn muốn thực hiện một số thống kê về mã của anh ấy. Tôi sẽ đặt mã của tôi lên cho tất cả để xem. Có bất kỳ nhập khẩu đặc biệt nào phải được thực hiện không? –

+1

Tôi sẽ sử dụng thư viện nhẹ như DocX http://docx.codeplex.com. – Hamdi

+0

@Hamdi cảm ơn tôi không biết về điều đó. Tôi đã thử và nó chắc chắn là đơn giản để sử dụng như trái ngược với Interop. Một lần nữa xin cảm ơn. –

Trả lời

17

Ok. Tôi đã tìm thấy giải pháp here.


Mã cuối cùng là như sau:

Application word = new Application(); 
    Document doc = new Document(); 

    object fileName = path; 
    // Define an object to pass to the API for missing parameters 
    object missing = System.Type.Missing; 
    doc = word.Documents.Open(ref fileName, 
      ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing); 

    String read = string.Empty; 
    List<string> data = new List<string>(); 
    for (int i = 0; i < doc.Paragraphs.Count; i++) 
    { 
     string temp = doc.Paragraphs[i + 1].Range.Text.Trim(); 
     if (temp != string.Empty) 
      data.Add(temp); 
    } 
    ((_Document)doc).Close(); 
    ((_Application)word).Quit(); 

    GridView1.DataSource = data; 
    GridView1.DataBind(); 
+0

Trong mã của tôi @ phương pháp mở, nó cho thấy rằng đường dẫn không hợp lệ và một số 'COMException không được xử lý' –

+0

Đó là một ý tưởng khủng khiếp khi sử dụng Office Interop từ ASP.NET hoặc một công nghệ máy chủ khác. Các API này được viết để sử dụng trong một ứng dụng máy tính để bàn, để tự động hóa Office (một bộ ứng dụng máy tính để bàn). Các ứng dụng máy chủ khác nhau theo nhiều cách làm cho nó trở thành một ý tưởng rất, rất tồi khi sử dụng Office Interop trong chúng. Nó cũng không được Microsoft hỗ trợ và có thể vi phạm giấy phép Office của bạn. Xem [Cân nhắc cho Tự động hóa phía máy chủ của văn phòng] (http://support.microsoft.com/kb/257757) –

6

Đoạn mã trên là chính xác, nhưng nó quá chậm. Tôi đã cải thiện mã và nhanh hơn nhiều so với mã trên.

List<string> data = new List<string>(); 
Application app = new Application(); 
Document doc = app.Documents.Open(ref readFromPath); 

foreach (Paragraph objParagraph in doc.Paragraphs) 
    data.Add(objParagraph.Range.Text.Trim()); 

((_Document)doc).Close(); 
((_Application)app).Quit(); 
1

Làm thế nào về điều này yo. Nhận tất cả các từ từ tài liệu và chia chúng ra khi trả lại hoặc bất kỳ điều gì tốt hơn cho bạn. Sau đó, chuyển sang danh sách

List<string> lines = doc.Content.Text.Split('\n').ToList(); 
+1

\ r \ a, nhưng \ r sẽ làm, không \ n – thang