2013-06-12 3 views
0

Я могу читать таблицы из файла doc. (см. следующий код)Прочитать таблицу из файла docx с помощью Apache POI

public String readDocFile(String filename, String str) { 
     try { 
      InputStream fis = new FileInputStream(filename); 
      POIFSFileSystem fs = new POIFSFileSystem(fis); 
      HWPFDocument doc = new HWPFDocument(fs); 

      Range range = doc.getRange(); 
      boolean intable = false; 
      boolean inrow = false; 

      for (int i = 0; i < range.numParagraphs(); i++) { 
       Paragraph par = range.getParagraph(i); 
       //System.out.println("paragraph "+(i+1)); 
       //System.out.println("is in table: "+par.isInTable()); 
       //System.out.println("is table row end: "+par.isTableRowEnd()); 
       //System.out.println(par.text()); 

       if (par.isInTable()) { 
        if (!intable) {//System.out.println("New table creating"+intable); 
         str += "<table border='1'>"; 
         intable = true; 
        } 
        if (!inrow) {//System.out.println("New row creating"+inrow); 
         str += "<tr>"; 
         inrow = true; 
        } 
        if (par.isTableRowEnd()) { 
         inrow = false; 
        } else { 
         //System.out.println("New text adding"+par.text()); 
         str += "<td>" + par.text() + "</td>"; 
        } 
       } else { 
        if (inrow) {//System.out.println("Closing Row"); 
         str += "</tr>"; 
         inrow = false; 
        } 
        if (intable) {//System.out.println("Closing Table"); 
         str += "</table>"; 
         intable = false; 
        } 
        str += par.text() + "<br/>"; 
       } 
      } 
     } catch (Exception e) { 
      System.out.println("Exception: " + e); 
     } 

     return str; 
    } 

Может ли кто-нибудь предложить мне, как я могу сделать то же самое с файлом docx? Я пытался это сделать. Но не удалось найти замену класса «Range».

Пожалуйста, помогите.

+1

Пробовали ли вы смотреть на [например Apache POI XWPF Table] (http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/SimpleTable.java)? На первый взгляд, это должно покрыть вас ... – Gagravarr

+0

Спасибо большое Ник ... –

+0

@Gagravarr почему бы не ответить? :) – Szundi

ответ

1

По многочисленным просьбам, содействие комментарий к ответу ...

В Apache POI code examples, вы можете найти XWPF SimpleTable example

Это показывает, как создать простую таблицу и как ее создать с большим количеством причудливого стиля.

Предполагая, что вы просто хотите простую таблицу с нуля, в новой книге, то код, который нужно идет по линии:

// Start with a new document 
XWPFDocument doc = new XWPFDocument(); 

// Add a 3 column, 3 row table 
XWPFTable table = doc.createTable(3, 3); 

// Set some text in the middle 
table.getRow(1).getCell(1).setText("EXAMPLE OF TABLE"); 

// table cells have a list of paragraphs; there is an initial 
// paragraph created when the cell is created. If you create a 
// paragraph in the document to put in the cell, it will also 
// appear in the document following the table, which is probably 
// not the desired result. 
XWPFParagraph p1 = table.getRow(0).getCell(0).getParagraphs().get(0); 

XWPFRun r1 = p1.createRun(); 
r1.setBold(true); 
r1.setText("The quick brown fox"); 
r1.setItalic(true); 
r1.setFontFamily("Courier"); 
r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH); 
r1.setTextPosition(100); 

// And at the end 
table.getRow(2).getCell(2).setText("only text"); 

// Save it out, to view in word 
FileOutputStream out = new FileOutputStream("simpleTable.docx"); 
doc.write(out); 
out.close(); 
+0

Я хочу читать таблицы из файла docx, но хочу знать, что эти таблицы находятся в пунктах и ​​где они находятся в файле docx. Есть ли способ получить таблицы из списка абзацев? Спасибо. @ Gagravarr –

0

Это не Apache POI, но использование стороннего компонента стало намного проще. An example how to get tables from a docx file.

Конечно, просто идея, если вы не можете найти решение с POI,

Смежные вопросы