Найдите таблицу в слове и напишите в этой таблице, используя Java

У меня есть документ Word, который может иметь n таблиц. Таблица идентифицируется по имени таблицы, которое записывается в 1-й ячейке как заголовок. Теперь мне нужно найти таблицу с именем таблицы и написать в одной из ячеек этой таблицы. Я попытался использовать apache-poi для того же, но не смог понять, как использовать его для своих целей. Пожалуйста, обратитесь к приложенному снимку экрана, если я не могу объяснить, как выглядит документ.

Спасибо как видно на скриншоте названия таблиц S1 и 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());  
                }  
            }  
        }  
    } 

это то, что я пробовал, но это читает только 1-ую таблицу.

2 ответа

Я обнаружил, что у тебя возникло недоразумение в пои. Если вы просто хотели прочитать таблицу. Просто используйте TableIterator для извлечения содержимого таблицы, или вы получите исключение без запуска таблицы.

Я полагаю, что в каждой ячейке таблицы есть только один абзац.

    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());
            }
        }
    }

Я думаю, что Apache POI - это путь. Это не очень хорошо задокументировано, но время, потраченное на исследование того, как его использовать, может стоить того. Документ Word в основном представляет собой иерархическую (древовидную) структуру, по которой вам нужно пройти и найти нужные вам данные.

Другие вопросы по тегам