java poi生成word 横向 插入多表格

news/2024/11/7 20:51:03/

相关jar:

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version></dependency><!-- CTPageSz 横向纵向设置 --><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.3</version></dependency>

//

 XWPFDocument xdoc = new XWPFDocument();CTSectPr sectPr = xdoc.getDocument().getBody().addNewSectPr();
CTPageSz pgsz = sectPr.isSetPgSz() ? sectPr.getPgSz() : sectPr.addNewPgSz();
//设置横板
pgsz.setW(BigInteger.valueOf(15840));
pgsz.setH(BigInteger.valueOf(11907));
pgsz.setOrient(STPageOrientation.LANDSCAPE);setTitleText(xdoc,"标题",18,false,true);
setTitleText(xdoc,"一、文件("+considers.size()+"件)",12,true,false);XWPFTable xTable = xdoc.createTable();//创建表格
CTTblPr tblPr =xTable.getCTTbl().addNewTblPr(); //内容居中 无效果
tblPr.addNewJc().setVal(STJc.CENTER);//兼容wps
CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW(); //列宽自动分割tblWidth.setW(new BigInteger("36000"));//总长度tblWidth.setType(STTblWidth.DXA);xTable.getRow(0).setHeight(300);//高度setBodyText(xTable.getRow(0).getCell(0), "序号", null,true,true,2000);
setBodyText(xTable.getRow(0).addNewTableCell(), "名称", null,true,true,10000);
setBodyText(xTable.getRow(0).addNewTableCell(), "类别", null,true,true,2000);
setBodyText(xTable.getRow(0).addNewTableCell(), "议案", null,true,true,4000);
setBodyText(xTable.getRow(0).addNewTableCell(), "", null,true,true,4000);
setBodyText(xTable.getRow(0).addNewTableCell(), "一审", null,true,true,4000);
setBodyText(xTable.getRow(0).addNewTableCell(), "", null,true,true,4000);
setBodyText(xTable.getRow(0).addNewTableCell(), "二审", null,true,true,4000);
setBodyText(xTable.getRow(0).addNewTableCell(), "", null,true,true,2000);XWPFTableRow rowTitle2 = xTable.createRow();//第二行表头
xTable.getRow(0).setHeight(300);
setBodyText(rowTitle2.getCell(0), "序号", null,true,true,2000);
setBodyText(rowTitle2.getCell(1), "名称", null,true,true,10000);
setBodyText(rowTitle2.getCell(2), "类别", null,true,true,2000);
setBodyText(rowTitle2.getCell(3), "单位", null,true,true,4000);
setBodyText(rowTitle2.getCell(4), "时间", null,true,true,4000);
setBodyText(rowTitle2.getCell(5), "承办机构", null,true,true,4000);
setBodyText(rowTitle2.getCell(6), "时间", null,true,true,4000);
setBodyText(rowTitle2.getCell(7), "承办机构", null,true,true,4000);
setBodyText(rowTitle2.getCell(8), "时间", null,true,true,2000);//合并 行列
XWPFTableCell cell = xTable.getRow(0).getCell(0);
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
cell = xTable.getRow(1).getCell(0);
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);cell = xTable.getRow(0).getCell(1);
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
cell = xTable.getRow(1).getCell(1);
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);cell = xTable.getRow(0).getCell(2);
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); // addNewVMerge 列
cell = xTable.getRow(1).getCell(2);
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);cell = xTable.getRow(0).getCell(3);
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); // addNewHMerge 行
cell = xTable.getRow(0).getCell(4);
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);cell = xTable.getRow(0).getCell(5);
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
cell = xTable.getRow(0).getCell(6);
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);cell = xTable.getRow(0).getCell(7);
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
cell = xTable.getRow(0).getCell(8);
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);//设置合并单元格的大小 兼容wps
//rowNum:合并的单元格所在行号  fromCellNum:合并的起始单元格  toCellNum:合并的结束单元格  9072:列宽总大小(我写死了9072)  columnNum:表格总列数
//            table.getRow(rowNum).getCell(fromCellNum).getCTTc().addNewTcPr().addNewTcW()
//                    .setW(BigInteger.valueOf((9072 / columnNum) * (toCellNum - fromCellNum + 1)));xTable.getRow(0).getCell(4).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf((36000 / 9) * (5 - 4 + 1)));// 创建表格内容
for (int i = 0; i < considers.size(); i++) {PlanYearDTO.ConsiderDto data = considers.get(i);XWPFTableRow row = xTable.createRow();row.setHeight(450);setBodyText(row.getCell(0),(i+1)+"",null,false,true,2000);//长度与列头对齐setBodyText(row.getCell(1),data.getTitle(),null,false,true,10000);setBodyText(row.getCell(2),StringUtils.isNotBlank(data.getFormulation())?classMap.get(data.getFormulation()):"",null,false,true,2000);setBodyText(row.getCell(3),data.getRequestGroupName(),null,false,true,4000);setBodyText(row.getCell(4),data.getRequestDate() == null ? "" : String.valueOf(data.getRequestDate()),null,false,true,4000);setBodyText(row.getCell(5),data.getFirstGroupName(),null,false,true,4000);setBodyText(row.getCell(6),data.getFirstDate() == null ? "" : String.valueOf(data.getFirstDate()),null,false,true,4000);setBodyText(row.getCell(7),data.getSecondGroupName(),null,false,true,4000);setBodyText(row.getCell(8),data.getSecondDate() == null ? "" : String.valueOf(data.getSecondDate()),null,false,true,2000);
}//项目二setTitleText(xdoc,"一、提请审议项目("+considers.size()+"件)",12,true,false);
xTable = xdoc.createTable();tblPr =xTable.getCTTbl().addNewTblPr(); //居中 无效果
tblPr.addNewJc().setVal(STJc.CENTER);// 创建表头数据
xTable.getRow(0).setHeight(300);// 创建表头数据
setBodyText(xTable.getRow(0).getCell(0), "序号", null,true,true,2000);
setBodyText(xTable.getRow(0).addNewTableCell(), "名称", null,true,true,10000);
setBodyText(xTable.getRow(0).addNewTableCell(), "类别", null,true,true,2000);
setBodyText(xTable.getRow(0).addNewTableCell(), "单位", null,true,true,12000);// 创建表格内容
for (int i = 0; i < surveys.size(); i++) {PlanYearDTO.ConsiderDto data = surveys.get(i);XWPFTableRow tableTwoRowTwo = xTable.createRow();XWPFTableRow row = xTable.createRow();row.setHeight(450);setBodyText(row.getCell(0),(i+1)+"",null,false,true,2000);setBodyText(row.getCell(1),data.getTitle(),null,false,true,10000);setBodyText(row.getCell(2),StringUtils.isNotBlank(data.getFormulation())?classMap.get(data.getFormulation()):"",null,false,true,2000);setBodyText(row.getCell(3),data.getDraftGroupName(),null,false,true,12000);
}xdoc.write(response.getOutputStream());
xdoc.close();

    /*** 设置表格内容*/private void setTitleText(XWPFDocument xdoc, String text, Integer fontSize, boolean isBold,boolean isCenter) {XWPFParagraph xp = xdoc.createParagraph();XWPFRun r1 = xp.createRun();r1.setText(text);r1.setFontFamily("宋体");if(fontSize != null){r1.setFontSize(fontSize);}if(isBold){r1.setBold(true);}if(isCenter){xp.setAlignment(ParagraphAlignment.CENTER);}}

    /*** 设置表格内容*/private void setBodyText(XWPFTableCell cell, String text,Integer fontSize, boolean isBold,boolean isCenter,Integer width) {CTTc cttc = cell.getCTTc();//文字居中CTTcPr cellPr = cttc.addNewTcPr();if(width != null){cellPr.addNewTcW().setW(BigInteger.valueOf(width));}if(isCenter){cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);}XWPFRun rIO = cell.addParagraph().createRun();rIO.setFontFamily("宋体");if(fontSize != null){rIO.setFontSize(fontSize);}else{rIO.setFontSize(12);}if(isBold){rIO.setBold(true);}rIO.setText(text);
//        cell.setText(text);}

效果演示:

兼容wps问题(未遇到  暂存):


// 列宽自动分割CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW(); //列宽自动分割tblWidth.setW(new BigInteger("36000"));tblWidth.setType(STTblWidth.DXA);//设置合并单元格的大小 兼容wps
//rowNum:合并的单元格所在行号  fromCellNum:合并的起始单元格  toCellNum:合并的结束单元格  9072:列宽总大小(我写死了9072)  columnNum:表格总列数
//            table.getRow(rowNum).getCell(fromCellNum).getCTTc().addNewTcPr().addNewTcW()
//                    .setW(BigInteger.valueOf((9072 / columnNum) * (toCellNum - fromCellNum + 1)));xTable.getRow(0).getCell(4).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf((36000 / 9) * (5 - 4 + 1)));

// XWPFRun  方法说明

//默认:宋体(wps)/等线(office2016) 5号 两端对齐 单倍间距
runX.setText("舜发于畎亩之中, 傅说举于版筑之间, 胶鬲举于鱼盐之中, 管夷吾举于士...");
runX.setBold(false);//加粗
runX.setCapitalized(false);//我也不知道这个属性做啥的
//runX.setCharacterSpacing(5);//这个属性报错
runX.setColor("BED4F1");//设置颜色--十六进制
runX.setDoubleStrikethrough(false);//双删除线
runX.setEmbossed(false);//浮雕字体----效果和印记(悬浮阴影)类似
//runX.setFontFamily("宋体");//字体
runX.setFontFamily("华文新魏", FontCharRange.cs);//字体,范围----效果不详
runX.setFontSize(14);//字体大小
runX.setImprinted(false);//印迹(悬浮阴影)---效果和浮雕类似
runX.setItalic(false);//斜体(字体倾斜)
//runX.setKerning(1);//字距调整----这个好像没有效果
runX.setShadow(true);//阴影---稍微有点效果(阴影不明显)
//runX.setSmallCaps(true);//小型股------效果不清楚
//runX.setStrike(true);//单删除线(废弃)
runX.setStrikeThrough(false);//单删除线(新的替换Strike)
//runX.setSubscript(VerticalAlign.SUBSCRIPT);//下标(吧当前这个run变成下标)---枚举
//runX.setTextPosition(5);//字体位置(效果不详)
//runX.setUnderline(UnderlinePatterns.DASH_LONG);//各种类型的下划线(枚举)

http://www.ppmy.cn/news/731979.html

相关文章

html横向导入word

导入word事件 /// <summary>/// 导入word事件/// </summary>/// <param name"sender"></param>/// <param name"e"></param>protected void btuDaoWord_ServerClick(object sender, EventArgs e){StringBuilder html …

PHP直接将html导出doc文件并使其doc横向排版

横向添加样式 <style> page Section1 {size:595.45pt 841.7pt; margin:1.0in 1.25in 1.0in 1.25in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}div.Section1 {page:Section1;}page Section2 {size:841.7pt 595.45pt;mso-page-orientat…

Java poi设置试图_使用Java中的Apache POI XWPF在word文档中切换横向/纵向

我试图在here的帮助下在单页上设置页面方向,但没有运气。此代码片断会生成一个文档,但它只会将最后一页设置为横向。我无法弄清楚什么是错误的...任何帮助或指导,将不胜感激! public static void main(String[] args) throws Exception {XWPFDocument document = new XWPFD…

web 横向导出word

做报表的时候&#xff0c;表格数据列头太多&#xff0c;需要横向导出。 <html><head><title>web横向导出word</title><script type"text/javascript">function AutomateWord(tableid,reportName){ try{ var oWD new ActiveXObject(…

Linux文本处理工具sed(流编辑器)

文章目录 Linux文本处理工具sed&#xff08;流编辑器&#xff09;1. 数据文件sed.tx2.将 “Lucy 女 29”插入到sed.txt的第三行3. 删除sed.txt中包含Lily的hang4. 将sed.txt中Lily替换为Lucy5. 将sed.txt文件中第2行删除并将Lily替换为Lucy Linux文本处理工具sed&#xff08;流…

word如何设置某一页横向

https://jingyan.baidu.com/article/db55b60994c1144ba30a2f81.html

html列表横向变纵向,word横向表格变竖向 word文档怎么把横向表格变成竖向

word文档的表格 竖向怎么变成横向 word中表格无法直接将表格变成横向的&#xff0c;但是可以将word的纸张变成横向。 具体操作如下&#xff1a; 第一步&#xff1a;将光标定位在有表格的那页&#xff0c;然后点击文件&#xff0c;选择页面设置&#xff1b; 第二步&#xff1a;方…

word横向网格线设置在哪里_word表格中横向网格线

word表格怎样修改网格线?? 首先显示word的网格线,如下图:接下来,设置网格线,具体路径如下图所示,调出网格线设置窗口:单击绘图网格图标,进行高级设置,上述参数可根据自己的需要进行设置。 word中制作的表格如何打印时显示网格线?我在word里制作了个 在word的工具栏中…