如何使用POI在.doc文档中创建表格?代码无法生成目标表格求助
解决Apache POI创建.doc表格失败的问题
嘿,我瞅你用POI操作旧版Word(.doc)表格的时候踩坑了,代码跑不起来没法生成目标表格是吧?我帮你捋捋问题出在哪,再给你调整好的代码。
首先说下你原代码里的几个小问题:
range.insertTableBefore的参数顺序搞反啦!HWPF里这个方法是先传行数,再传列数,你写的(short) columns, rows会让表格的行列颠倒,结构直接错了。- 往单元格里写内容的方式不太对,
par.insertBefore有时候没法正确把文本放到单元格里,用CharacterRun来添加文本更靠谱。 - 你最后保存文件的路径还没写完,得确保路径完整才能正常输出文档。
给你修正后的完整代码,直接就能用:
private static void insertTable() throws FileNotFoundException, IOException { // 打开源文档 HWPFDocument doc = new HWPFDocument(new FileInputStream("/home/ikadmin/Downloads/in.doc")); int rows = 3, columns = 3; Range range = doc.getRange(); // 注意参数顺序:行数在前,列数在后 Table table = range.insertTableBefore(rows, (short) columns); for (int rowIdx = 0; rowIdx < table.numRows(); rowIdx++) { TableRow row = table.getRow(rowIdx); for (int colIdx = 0; colIdx < row.numCells(); colIdx++) { TableCell cell = row.getCell(colIdx); Paragraph par = cell.getParagraph(0); // 创建CharacterRun来添加文本,确保内容正确放入单元格 CharacterRun run = par.createCharacterRun(); run.setText("" + (rowIdx * columns + colIdx)); } } // 完整的输出路径,替换成你自己的路径 String newFilePath = "/home/ikadmin/Downloads/out.doc"; // 保存修改后的文档 try (FileOutputStream out = new FileOutputStream(newFilePath)) { doc.write(out); } finally { doc.close(); } }
你试试这段代码,应该就能生成你想要的3×3表格啦,每个单元格会按顺序填充0-8的数字。
内容的提问来源于stack exchange,提问作者Divyesh Kanzariya
相关产品推荐
相关产品推荐

