(2) POI 读word表格

本文提供两种使用Java代码解析Word文档中表格的方法。一种是通过遍历文档中的所有段落找到表格并提取内容,另一种是利用TableIterator遍历所有的表格及其单元格内容。这两种方法均适用于包含复杂表格结构的Word文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一段
Java code
try { FileInputStream in = new FileInputStream("D:\\XBRL.doc");// 载入文档 POIFSFileSystem pfs = new POIFSFileSystem(in); HWPFDocument hwpf = new HWPFDocument(pfs); Range range = hwpf.getRange();// 得到文档的读取范围 int paraNum = range.numParagraphs(); int m = 0; // 数组下标 String[] ret = new String[paraNum]; for (int i = 0; i < paraNum; ++i) { // 从每一段落中获取文字,每一段是一个回车 Paragraph p = range.getParagraph(i); boolean test = p.isInTable(); // 判断该Paragraph是否在word的表格中 if (test == true) { Table table = range.getTable(p); // 通过第一个在table中的Paragraph来获取整个table int numRow = table.numRows(); // 获取table中的行数 for (int j = 0; j < numRow; j++) { TableRow tablerow = table.getRow(j); // 获得一行 int numbercell = tablerow.numCells(); // 通过tablerow获取单元格个数 for (int k = 0; k < numbercell; k++) { TableCell tablexell = tablerow.getCell(k); // 获得单元格 int p1 = tablexell.numParagraphs(); // 获取单元格中的Paragraph的个数 String str = ""; for (int l = 0; l < p1; l++) { Paragraph para = tablexell.getParagraph(l); str = str + para.text().trim(); // 得到单元格中的内容 } for (int n = m; n < paraNum;) { ret[n] = str; // 将单元格中的内容方入数组元素中 break; } m++; } } } } for (int i = 0; i < paraNum; i++) { System.out.println(ret[i]); } } catch (Exception e) { e.printStackTrace(); }

第二段
Java code
try { POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream( "D:\\XBRL.doc")); HWPFDocument doc = new HWPFDocument(fs); Range range = doc.getOverallRange(); TableIterator ti = new TableIterator(range); // Table table = null; while (ti.hasNext()) { System.out.println("Getting table!"); Table table = (Table)ti.next(); System.out.println("Number of rows: " + table.numRows()); for (int a = 0; a < table.numRows(); a++) { TableRow row = table.getRow(a); System.out.println("\tTable row number: " + a); for (int b = 0; b < row.numCells(); b++) { System.out.println("\t\tTable cell number: " + b); TableCell tablecell = row.getCell(b); for (int c = 0; c < tablecell.numParagraphs(); c++) { Paragraph tablepara = tablecell.getParagraph(c); for (int d = 0; d < tablepara.numCharacterRuns(); d++) { CharacterRun run = tablepara.getCharacterRun(d); System.out.println("\t\tText: \"" + run.text() + "\""); } } } } System.out.println("\n"); } } catch (Exception e) { e.printStackTrace(); }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值