2012-09-24 11 views
5

Ho un documento word che può avere n numero di tabelle. La tabella è identificata dal nome della tabella che è scritto nella prima cella come intestazione. Ora devo trovare la tabella con il nome della tabella e scrivere in una delle celle di quel tavolo. Ho provato ad usare apache-poi per lo stesso, ma non sono riuscito a capire come usarlo per il mio scopo. Si prega di fare riferimento alla schermata allegata, se non sono in grado di spiegare come appare il documento.Trova una tabella in una parola e scrivi in ​​quella tabella utilizzando java

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

questo è quello che ho provato, ma questa legge solo il primo tavolo.

+0

@ADG, si dovrebbe postare come risposta. POI è definitivamente la biblioteca di parole più matura. – tom

+0

rimosso tag di selenio .. non so perché lo hai collegato –

+0

@tom incollato come risposta;) –

risposta

2

Penso che Apache POI sia la strada da percorrere. Non è ben documentato, ma il tempo speso per la ricerca su come usarlo potrebbe valerne la pena. Il documento di Word è fondamentalmente una struttura gerarchica (albero) che devi attraversare e trovare i dati di cui hai bisogno.

+0

Ho provato a utilizzare Apache POI ma non riesco a trovare una tabella specifica. – gSr

+0

@gSr per favore mostra il codice che hai già –

+0

Aggiunto quello che ho provato. – gSr

2

Ho trovato un malinteso in poi. Se vuoi solo leggere una tabella, usa TableIterator per recuperare il contenuto della tabella o otterrai un'eccezione senza l'inizio della tabella.

Suppongo che ci sia un solo paragrafo in ogni cella di tabella.

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

Bello, ma funziona con Word prima del 2007. – javydreamercsw

Problemi correlati