2012-09-24 17 views
5

Tengo un documento de Word que puede tener n cantidad de tablas. La tabla se identifica por el nombre de la tabla que se escribe en la 1ª celda como encabezado. Ahora tengo que encontrar la tabla con el nombre de la tabla y escribir en una de las celdas de esa tabla. Intenté usar apache-poi para el mismo pero no pude encontrar la forma de usarlo para mi propósito. Consulte la captura de pantalla adjunta, si no puedo explicar cómo se ve el documento.Busque una tabla en word y escriba en esa tabla usando java

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

esto es lo que he intentado, pero esto sólo lee la primera tabla.

+0

@ADG, debe publicar eso como respuesta. POI es definitivamente la biblioteca de palabras más madura. – tom

+0

eliminó las etiquetas de selenio ... no sé por qué lo vinculó –

+0

@tom pegado como respuesta;) –

Respuesta

2

Creo que Apache POI es el camino a seguir. No está bien documentado, pero el tiempo invertido en investigar cómo usarlo puede valer la pena. El documento de Word es básicamente una estructura jerárquica (árbol) que necesita recorrer y encontrar los datos que necesita.

+0

Intenté usar Apache POI pero no pude encontrar una tabla específica. – gSr

+0

@gSr muestra el código que ya tienes –

+0

Agregué lo que he intentado. – gSr

2

He encontrado u obtener malentendidos en poi. Si tiene la intención de leer una tabla. Simplemente use TableIterator para buscar el contenido de la tabla u obtendrá una excepción sin el inicio de la tabla.

Supongo que solo hay un párrafo en cada celda de la tabla.

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

Bueno, pero esto funciona con Word antes de 2007. – javydreamercsw

Cuestiones relacionadas