代码参考了http://stackoverflow.com/questions/24907541/row-span-with-xwpftable,代码如下:
import java.io.FileOutputStream; import java.math.BigInteger; 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; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; public class POI_表格合并_S3_Test { public static void main(String[] args) throws Exception { POI_表格合并_S3_Test t=new POI_表格合并_S3_Test(); XWPFDocument document = new XWPFDocument(); t.megerTableCell(document); t.saveDocument(document, "f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx"); } public void megerTableCell(XWPFDocument document) { XWPFTable table1 = document.createTable(6, 8); setTableWidth(table1, "8000"); fillTable(table1); mergeCellsVertically(table1, 1, 1,4); mergeCellsVertically(table1, 4, 2, 4); mergeCellsHorizontal(table1,0,3,5); mergeCellsHorizontal(table1,2,2,3); mergeCellsHorizontal(table1,2,6,7); } public void fillTable(XWPFTable table) { for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++) { XWPFTableRow row = table.getRow(rowIndex); row.setHeight(380); for (int colIndex = 0; colIndex < row.getTableCells().size(); colIndex++) { XWPFTableCell cell = row.getCell(colIndex); if(rowIndex%2==0){ setCellText(cell, " cell " + rowIndex + colIndex + " ", "D4DBED", 1000); }else{ setCellText(cell, " cell " + rowIndex + colIndex + " ", "AEDE72", 1000); } } } } public void setCellText(XWPFTableCell cell,String text, String bgcolor, int width) { CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); //cell.setColor(bgcolor); CTTcPr ctPr = cttc.addNewTcPr(); CTShd ctshd = ctPr.addNewShd(); ctshd.setFill(bgcolor); ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cell.setText(text); } /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) { XWPFTableCell cell = table.getRow(row).getCell(cellIndex); if ( cellIndex == fromCell ) { // The first merged cell is set with RESTART merge value cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); } else { // Cells which join (merge) the first one, are set with CONTINUE cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); } } } /** * @Description: 跨行合并 * @see http://stackoverflow.com/questions/24907541/row-span-with-xwpftable */ public void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) { XWPFTableCell cell = table.getRow(rowIndex).getCell(col); if ( rowIndex == fromRow ) { // The first merged cell is set with RESTART merge value cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); } else { // Cells which join (merge) the first one, are set with CONTINUE cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); } } } public void setTableWidth(XWPFTable table,String width){ CTTbl ttbl = table.getCTTbl(); CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr(); CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW(); CTJc cTJc=tblPr.addNewJc(); cTJc.setVal(STJc.Enum.forString("center")); tblWidth.setW(new BigInteger(width)); tblWidth.setType(STTblWidth.DXA); } public void saveDocument(XWPFDocument document, String savePath) throws Exception { FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } }
结果如下:
全文完。
相关推荐
`mergeCells(cellStart, cellEnd)`函数执行实际的单元格合并。 5. **设置对齐方式和字体**: `builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT)`将段落对齐方式设置为左对齐。`宋体;font-size...
### POI 获取合并单元格详解 #### 一、概述 Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 格式的文档,如 Word、Excel 和 PowerPoint。在本篇文章中,我们将详细介绍如何使用 POI 处理 Excel 文件...
POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法
在Excel中,合并单元格是指将多个连续的单元格合并成一个单元格来显示数据。这在表格布局设计中非常有用,可以提高数据的可读性和美观性。然而,这对于数据处理来说是一个挑战,因为合并单元格实际上可能包含来自...
单元格合并是通过 `Sheet` 对象的 `mergeRegion` 方法实现的,该方法接受两个参数,分别表示要合并的区域的起始和结束单元格索引: ```java // 合并从第二列到第四列的单元格(索引从0开始) sheet.mergeRegions...
总的来说,Java的POI库为我们提供了处理Microsoft Office文件的强大工具,无论是合并Excel还是Word文档,都能有效地完成任务。通过熟练掌握POI的使用,可以极大地提升工作效率,简化数据管理和文档处理的工作流程。
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。在本案例中,我们关注的是如何使用Apache POI将Word文档转换为HTML格式,并且保持原有的样式、表格...
在本主题中,我们将聚焦于如何使用Apache POI来操作Word文档中的表格。 在Word文档中,表格是一种常用的数据展示和组织方式。使用Apache POI,我们可以创建、修改、读取和格式化Word文档中的表格。以下是一些关键...
本篇文章将详细讲解如何利用Apache POI库在Java中实现Word文档的数据填充以及多文件合并。 1. **Apache POI简介** Apache POI是一个开源项目,提供了一组API来处理Microsoft Office格式的文件,如DOCX(Word 2007...
同时,如果模板中的表格结构复杂,可能需要对单元格的合并、列宽、行高等属性进行调整。 Apache POI提供了丰富的API,使得开发者可以灵活地操作Word文档,实现复杂的格式化和动态数据填充。通过熟练掌握这些API,...
EasyUIPoI是一款基于Apache POI的Java工具库,专门用于简化Excel的导出操作,尤其在处理模板和合并单元格方面提供了便利。这个库主要适用于那些需要在Web应用中生成Excel报告或导出数据的场景,比如数据分析、报表...
在实际应用中,你可能还需要处理更复杂的情况,比如样式设置、合并单元格、表格边框等。记得在完成操作后,你需要使用`document.write()`方法将修改后的文档保存到文件系统中。 在开发过程中,确保正确处理文件输入...
同时,POI也支持合并单元格,这在创建标题或汇总行时非常有用。 在导出过程中,我们通常会将工作簿写入到一个`OutputStream`,如内存流或文件流。例如,我们可以使用`workbook.write(outputStream)`方法将工作簿...
在实际应用中,你可能需要处理更复杂的情况,比如合并单元格、处理公式、格式转换等,这都需要对POI API有更深入的理解。同时,为了提高性能,可以考虑使用内存管理和流式处理策略,尤其是在处理大型文件时。
poi写word工具类,包括添加标题,插入表格,合并单元格,插入图片,自动生成目录;代码见 https://blog.csdn.net/zheng_chang_wei/article/details/89448055
1. 使用Apache POI的XWPF API读取Word文档,获取文档的文本、段落、表格等元素。 2. 创建一个Docx4j的WordprocessingMLPackage对象,加载POI解析出的Word文档内容。 3. 调用Docx4j的`WordprocessingMLPackage.toPDF...
在本场景中,我们讨论的是如何利用FreeMarker来导出Word表格。这个过程通常涉及到以下步骤: 1. **创建Word模板**: 首先,你需要使用Microsoft Word创建所需的表格和格式。Word允许用户设计丰富的布局,包括...
在Apache POI中,处理Word表格主要涉及`XWPFDocument`和`XWPFTable`类。首先,你需要创建一个`XWPFDocument`对象来打开或创建Word文档。然后,你可以通过`getTables()`方法获取文档中的所有表格,并通过表格的索引来...
本示例将详细介绍如何使用Apache POI解析Office Excel 2003和2007,以及Word 2003和2007的文件。 首先,我们来看Excel的解析。Excel 2003使用的是.BOOK文件格式(HSSFWorkbook),而2007及以上版本使用的是.XLSX...
使用POI的`XSSFWorkbook`类打开Excel文件,然后通过` XSSFSheet `获取工作表,并使用` XSSFRow `和` XSSFCell `遍历单元格数据: ```java import org.apache.poi.xssf.usermodel.*; // ... FileInputStream fis =...