2012-09-24 45 views
5

Tôi có một tài liệu từ có thể có số lượng bảng n. Bảng được xác định bởi tên bảng được viết trong ô thứ nhất làm tiêu đề. Bây giờ tôi phải tìm bảng có tên bảng và viết vào một trong các ô của bảng đó. Tôi đã thử sử dụng apache-poi cho cùng nhưng không thể tìm ra cách sử dụng nó cho mục đích của tôi. Vui lòng tham khảo ảnh chụp màn hình được đính kèm, nếu tôi không thể giải thích cách tài liệu trông như thế nào.Tìm một bảng bằng chữ và viết trong bảng đó bằng cách sử dụng java

Cảm ơn as seen in screenshot name of tables are S1 and S2

String fileName = "E:\\a1.doc"; 

    if (args.length > 0) { 
     fileName = args[0]; 
    } 

    InputStream fis = new FileInputStream(fileName); 
    POIFSFileSystem fs = new POIFSFileSystem(fis); 
    HWPFDocument doc = new HWPFDocument(fs); 

    Range range = doc.getRange(); 
    for (int i=0; i<range.numParagraphs(); i++){ 
     Paragraph tablePar = range.getParagraph(i); 

     if (tablePar.isInTable()) { 
      Table table = range.getTable(tablePar); 
      for (int rowIdx=0; rowIdx<table.numRows(); rowIdx++) { 

       for (int colIdx=0; colIdx<row.numCells(); colIdx++) { 
        TableCell cell = row.getCell(colIdx); 
        System.out.println("column="+cell.getParagraph(0).text()); 
       } 
      } 
     } 
    } 

đây là những gì tôi đã cố gắng, nhưng điều này chỉ đọc các bảng 1.

+0

@ADG, bạn nên đăng câu trả lời đó. POI là thư viện từ trưởng thành nhất. – tom

+0

xóa các thẻ selenium .. không biết tại sao bạn liên kết nó –

+0

@tom được dán dưới dạng câu trả lời;) –

Trả lời

2

Tôi nghĩ Apache POI là con đường để đi. Nó không được ghi chép đầy đủ, nhưng thời gian dành cho việc nghiên cứu cách sử dụng nó có thể đáng giá. Tài liệu Word về cơ bản là cấu trúc phân cấp (cây) mà bạn cần duyệt và tìm dữ liệu bạn cần.

+0

Tôi đã thử sử dụng Apache POI nhưng không thể tìm thấy một bảng cụ thể. – gSr

+0

@gSr vui lòng hiển thị mã mà bạn đã có –

+0

Đã thêm những gì tôi đã thử. – gSr

2

Tôi đã tìm thấy bạn hiểu sai về poi. Nếu bạn chỉ có nghĩa là để đọc một bảng. Chỉ cần sử dụng TableIterator để lấy nội dung của bảng hoặc u sẽ nhận được một ngoại lệ với không bắt đầu của bảng.

Tôi cho rằng chỉ có một đoạn trong mỗi ô bảng.

InputStream fis = new FileInputStream(fileName); 
    POIFSFileSystem fs = new POIFSFileSystem(fis); 
    HWPFDocument doc = new HWPFDocument(fs); 

    Range range = doc.getRange(); 
    TableIterator itr = new TableIterator(range); 
    while(itr.hasNext()){ 
     Table table = itr.next(); 
     for(int rowIndex = 0; rowIndex < table.numRows(); rowIndex++){ 
      TableRow row = table.getRow(rowIndex); 
      for(int colIndex = 0; colIndex < row.numCells(); colIndex++){ 
       TableCell cell = row.getCell(colIndex); 
       System.out.println(cell.getParagraph(0).text()); 
      } 
     } 
    } 
+0

Rất hay, nhưng điều này hoạt động với Word sớm hơn năm 2007. – javydreamercsw

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