使用poi读取文档中的表格,当有多个表格时可以指定需要读取的表格,同时支持读取docx和doc格式。需要添加poi的jar包
测试文档如下图:

程序代码:
import java.io.FileInputStream; import java.util.Iterator; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Paragraph; import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.hwpf.usermodel.Table; import org.apache.poi.hwpf.usermodel.TableCell; import org.apache.poi.hwpf.usermodel.TableIterator; import org.apache.poi.hwpf.usermodel.TableRow; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; * 读取word文档中表格数据,支持doc、docx public static void main(String[] args) { ExportDoc test = new ExportDoc(); String filePath = "D:\\new\\测试.docx"; // String filePath = "D:\\new\\测试.doc"; public void testWord(String filePath){ FileInputStream in = new FileInputStream(filePath);//载入文档 // 处理docx格式 即office2007以后版本 if(filePath.toLowerCase().endsWith("docx")){ //word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后 XWPFDocument xwpf = new XWPFDocument(in);//得到word文档的信息 Iterator<XWPFTable> it = xwpf.getTablesIterator();//得到word中的表格 // 设置需要读取的表格 set是设置需要读取的第几个表格,total是文件中表格的总数 for (int i = 0; i < set-1; i++) { XWPFTable table = it.next(); System.out.println("这是第" + num + "个表的数据"); List<XWPFTableRow> rows = table.getRows(); for (int i = 0; i < rows.size(); i++) { XWPFTableRow row = rows.get(i); List<XWPFTableCell> cells = row.getTableCells(); for (int j = 0; j < cells.size(); j++) { XWPFTableCell cell = cells.get(j); System.out.print(cell.getText() + "\t"); POIFSFileSystem pfs = new POIFSFileSystem(in); HWPFDocument hwpf = new HWPFDocument(pfs); Range range = hwpf.getRange();//得到文档的读取范围 TableIterator it = new TableIterator(range); // 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数 for (int i = 0; i < set-1; i++) { Table tb = (Table) it.next(); System.out.println("这是第" + num + "个表的数据"); //迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可 for (int i = 0; i < tb.numRows(); i++) { TableRow tr = tb.getRow(i); for (int j = 0; j < tr.numCells(); j++) { TableCell td = tr.getCell(j);//取得单元格 for(int k = 0; k < td.numParagraphs(); k++){ Paragraph para = td.getParagraph(k); if(null != s && !"".equals(s)){ s = s.substring(0, s.length()-1); System.out.print(s + "\t");
运行结果:
|