1.maven依赖

<!-- 导出EXCEL --><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><!-- 导出EXCEL --><!-- word读取 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency><!-- word读取 -->

二导出word 横版:3要点

  1. ooxml-schemas 依赖
       <dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency>
  1. 设置 :横屏板式
XWPFDocument doc = new XWPFDocument();CTDocument1 document = doc.getDocument();CTBody body = document.getBody();if (!body.isSetSectPr()) {body.addNewSectPr();}CTSectPr section = body.getSectPr();if (!section.isSetPgSz()) {section.addNewPgSz();}//1. 设置页面大小  当前A4大小CTPageSz pageSize = section.getPgSz();//1.1 必须要设置下面两个参数,否则整个的代码是无效的pageSize.setW(BigInteger.valueOf(16840));pageSize.setH(BigInteger.valueOf(11907));pageSize.setOrient(STPageOrientation.LANDSCAPE);

3.设置excel表格布局方式

     //4 表格内容XWPFTable comTable = doc.createTable();//4.1表格宽度为指定宽度:STTblWidth.DXA 1CTTblPr ctTblPr = comTable.getCTTbl().addNewTblPr();CTTblWidth comTableWidth = ctTblPr.addNewTblW();comTableWidth.setType(STTblWidth.DXA);comTableWidth.setW(BigInteger.valueOf(16000));//4.1.2设置布局为固定不便方式CTTblLayoutType ctTblLayoutType = ctTblPr.isSetTblLayout()?ctTblPr.getTblLayout():ctTblPr.addNewTblLayout();ctTblLayoutType.setType(STTblLayoutType.FIXED);

网络通用下下载横版word 横版excel 表格:

import org.apache.commons.lang.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class ExportWord {/*** 下载横屏word的excel表格** @param filename:文件名* @param titleStr:标题名* @param description:居中描述:可空* @param value_columns:列明* @param dataList:数据* @param colWidths:列宽度,可空* @param response:HttpServletResponse* @throws IOException*/public static void downWordTransverse(String filename, String titleStr, String description, String[] value_columns, List<List<String>> dataList, Integer[] colWidths,ParagraphAlignment[] excelAlign, HttpServletResponse response) throws IOException {XWPFDocument doc = new XWPFDocument();CTDocument1 document = doc.getDocument();CTBody body = document.getBody();if (!body.isSetSectPr()) {body.addNewSectPr();}CTSectPr section = body.getSectPr();if (!section.isSetPgSz()) {section.addNewPgSz();}//1. 设置页面大小  当前A4大小CTPageSz pageSize = section.getPgSz();//1.1 必须要设置下面两个参数,否则整个的代码是无效的pageSize.setW(BigInteger.valueOf(16840));pageSize.setH(BigInteger.valueOf(11907));pageSize.setOrient(STPageOrientation.LANDSCAPE);//1.2 设置页面为窄边距setDocumentMargin(section,"420","720","420","720");//2. 添加标题XWPFParagraph titleParagraph = doc.createParagraph();//设置段落居中titleParagraph.setAlignment(ParagraphAlignment.CENTER);XWPFRun titleParagraphRun = titleParagraph.createRun();titleParagraphRun.setText(titleStr);titleParagraphRun.setColor("000000");titleParagraphRun.setFontFamily("方正小标宋简体");titleParagraphRun.setFontSize(22);if (!StringUtils.isEmpty(description)) {//3. 添加段落,描述XWPFParagraph dateParagraph = doc.createParagraph();//3.1 设置段落居中dateParagraph.setAlignment(ParagraphAlignment.CENTER);//3.2设置标题居中XWPFRun dateParagraphRun = dateParagraph.createRun();dateParagraphRun.setText(description);dateParagraphRun.setColor("000000");dateParagraphRun.setFontFamily("仿宋");dateParagraphRun.setFontSize(12);}//4.表格//表格内容XWPFTableCell cell;CTTcPr cellPr;CTTblWidth cellw;XWPFTable comTable = doc.createTable();//4.1表格宽度为指定宽度:STTblWidth.DXA 1CTTblPr ctTblPr = comTable.getCTTbl().addNewTblPr();CTTblWidth comTableWidth = ctTblPr.addNewTblW();comTableWidth.setType(STTblWidth.DXA);comTableWidth.setW(BigInteger.valueOf(16000));//4.1.2设置布局为固定不便方式CTTblLayoutType ctTblLayoutType = ctTblPr.isSetTblLayout()?ctTblPr.getTblLayout():ctTblPr.addNewTblLayout();ctTblLayoutType.setType(STTblLayoutType.FIXED);//4.2 表头XWPFTableRow rowHead = comTable.getRow(0);//4.3设置表格首行单元格XWPFParagraph cellParagraph;XWPFRun cellParagraphRun;for (int i = 0; i < value_columns.length; i++) {if(i==0){cell = rowHead.getCell(0);}else{cell = rowHead.addNewTableCell();}cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//垂直居中//设置单元格宽度cellPr = cell.getCTTc().addNewTcPr();cellw = cellPr.addNewTcW();if(colWidths!=null){cellw.setType(STTblWidth.DXA);cellw.setW(BigInteger.valueOf(colWidths[i]));}//设置单元格内容cellParagraph = cell.getParagraphs().get(0);cellParagraph.setAlignment(ParagraphAlignment.CENTER); //设置表头单元格居中cellParagraphRun = cellParagraph.createRun();cellParagraphRun.setFontFamily("黑体");cellParagraphRun.setFontSize(12); //设置表头单元格居中cellParagraphRun.setText(value_columns[i]);}int rows = dataList.size();for (int i = 0; i < rows; i++) {XWPFTableRow rowsContent = comTable.createRow();for (int j = 0; j < dataList.get(i).size(); j++) {//设置单元格宽度cell = rowsContent.getCell(j);cellPr = cell.getCTTc().addNewTcPr();cellw = cellPr.addNewTcW();if(colWidths!=null){cellw.setType(STTblWidth.DXA);cellw.setW(BigInteger.valueOf(colWidths[j]));}cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//垂直居中//设置单元格内容XWPFParagraph cellParagraphC = cell.getParagraphs().get(0);if(excelAlign!=null){cellParagraphC.setAlignment(excelAlign[j]);}else{cellParagraphC.setAlignment(ParagraphAlignment.LEFT);}String textContent = dataList.get(i).get(j);if (textContent.indexOf("\n") == -1) {XWPFRun cellParagraphRunC = cellParagraphC.createRun();cellParagraphRunC.setFontFamily("仿宋");cellParagraphRunC.setFontSize(12); //设置表格内容字号cellParagraphRunC.setText(dataList.get(i).get(j) + ""); //单元格段落加载内容} else {String[] textContentArray = textContent.split("\n");int m = 0;for (String text : textContentArray) {String regex = "^\\*\\*(.*?)\\*\\*";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);if(matcher.find()){String contentF = matcher.group().replaceAll("\\*","");XWPFRun cellParagraphRunC = cellParagraphC.createRun();cellParagraphRunC.setFontFamily("仿宋");cellParagraphRunC.setFontSize(12); //设置表格内容字号cellParagraphRunC.setText(contentF);//设置该段内容cellParagraphRunC.setBold(true);//设置加粗//取出剩余的内容text = text.replace(matcher.group(),"");}m++;XWPFRun cellParagraphRunC = cellParagraphC.createRun();cellParagraphRunC.setFontFamily("仿宋");cellParagraphRunC.setFontSize(12); //设置表格内容字号cellParagraphRunC.setText(text);if(m!=textContentArray.length){cellParagraphRunC.addBreak(BreakType.TEXT_WRAPPING);}}}}}OutputStream out = null;try {response.setContentType("application/force-download");// 设置强制下载不打开response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(filename, "utf-8") + ".docx");// 设置文件名out = response.getOutputStream();doc.write(out);out.close();} catch (Exception e) {e.printStackTrace();}}/*** 设置页边距 (word中1厘米约等于567)* @param section* @param left* @param top* @param right* @param bottom*/public static void setDocumentMargin(CTSectPr section, String left,String top, String right, String bottom) {if(!section.isSetPgMar()){section.addNewPgMar();}CTPageMar ctpagemar = section.getPgMar();if (!Util.isNull(left)) {ctpagemar.setLeft(new BigInteger(left));}if (!Util.isNull(top)) {ctpagemar.setTop(new BigInteger(top));}if (!Util.isNull(right)) {ctpagemar.setRight(new BigInteger(right));}if (!Util.isNull(bottom)) {ctpagemar.setBottom(new BigInteger(bottom));}}
}

三、工具类使用方式及效果

String titleStr = "标题";
String description = "描述";
String[] value_columns = {"列1", "列2", "列3","列4","列5","列6","列7","列8"};
List<List<String>> dataList = new ArrayList<>();//导出的数据
Integer[] colWidths = {600,1700,2200,700,900,1500,7350,1050};//导出的excel宽度excel(扣除边距剩余共16000宽)
ParagraphAlignment[] excelAlign = {ParagraphAlignment.CENTER,ParagraphAlignment.LEFT,ParagraphAlignment.LEFT,ParagraphAlignment.CENTER,ParagraphAlignment.CENTER,ParagraphAlignment.LEFT,ParagraphAlignment.LEFT,ParagraphAlignment.CENTER};//设置水平方向downWordTransverse(titleStr,titleStr,description,value_columns,dataList,colWidths,excelAlign,response);

POI 导出横版A4word,并设置excel宽度(固定不变形)相关推荐

  1. vue导出横版pdf并解决内容分割问题

    准备工作和vue导出PDF一样,接下来讲的是一些区别 首先是div中 div中将要导出的div层添加ref,相关子内容标签加上 class="item" 为了后续内容分割处理 &l ...

  2. java poi 数据透视,java 利用poi导出默认以表格展示的excel透视表

    前言: 从前,我是一个前端程序猿,怀着对打通任(前)督(后)二(开)脉(发)的梦想转了后端,自学两礼拜java+spring全家桶,直接上项目实战.最近接到一需求:将业务数据导出一张透视表. 需求开发 ...

  3. poi导出带有下拉选项的Excel,解决下拉选项过多报错的问题

    /*** 下载Excel模板*/ @GetMapping("/downloadTemplate") public void downloadTemplate(HttpServlet ...

  4. java将jsp页面表格导出excel表格数据_简单的POI导出JSP页面表格数据到excel

    数据库中的equipment表数据: 读取数据库中表数据的代码TestExcel.java public class TestExcel extends BaseAction{/** * @param ...

  5. 通过poi导出复杂excel既有合并行又有合并列

    通过poi导出形如以下的复杂excel: 此excel里左边和右边的用户可以自由选择是否导出这几列,中间的题型有单选.多选.填空.排序 这是详情表,还有分值表如下: 占比表如下: 我自己写了个针对上面 ...

  6. POI导出表格Java代码实现

    POI导出表格 1. 引入依赖 2. Excel导出核心代码 2.1 核心代码导入包 2.2 核心util代码 2.3 Controller表格导出实现 3. Excel导出结果展示 3.1 导出链接 ...

  7. poi设置word表格单元格宽度_xwpftable设置宽度;POI操作Word设置表格宽度

    poi 操作word里表格,如设置表格宽度.行高.表格样式等. 1.表格或单元格宽度: 默认TblW的type属性为STTblWidth.AUTO,即自动伸缩.所以要调整为指定类型:STTblWidt ...

  8. POi 导出word 表格,设置页面横版

    https://blog.csdn.net/qq_26408545/article/details/110669104 poi 导入,高版本不兼容,建议以下版本: <dependency> ...

  9. Springboot整合Poi导出excel(简单版)

    一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...

最新文章

  1. 多个SSH key对应多个Host: Github, Bitbucket
  2. 网页html是什么语言程序,html是什么
  3. CCBPM高级开发之类设计与数据库设计命名规则
  4. jQuery 打气球小游戏 点击气球爆炸效果
  5. C/C++:Windows编程—代码实现IE保护模式的关闭和开启
  6. tf.keras.layers.Attention 理解总结
  7. 获得Open Images冠军,商汤TSD目标检测算法入选CVPR 2020 ​
  8. 凝思linux操作系统4.2内核版本_打破技术垄断!国产操作系统的逆袭之路
  9. Java中对象的串行化(Serialization)和transient关键字
  10. 任意数的matlab中阶乘,数组表示
  11. java html转word!
  12. Android包管理机制(二)PackageInstaller安装APK
  13. ipad 的android模拟器,苹果IPAD模拟器(iPadian)
  14. 李涛专家主讲PS高手之路经典视频教程(1G打包下载)
  15. java 编写扑克牌洗牌,java斗地主扑克 扑克牌 洗牌 发牌 Collection 集合练习
  16. Win10下修改git全部配置文件方法
  17. 一个通过SOAP web service驱动ssh/telnet执行命令的小平台
  18. Java HashMap的遍历(常用的四种方式),及key,value规律
  19. Class 2 基于ECS快速搭建Docker环境
  20. php 判断是否是机器人,PHP_php实现判断访问来路是否为搜索引擎机器人的方法,本文实例讲述了php实现判断访 - phpStudy...

热门文章

  1. win10 uwp 保存用户选择文件夹
  2. Mac操作系统配置Git
  3. elementUI 表格筛选 默认选中
  4. pnpm ERR_PNPM_ADDING_TO_ROOT
  5. Java线程池实现原理及其在美团业务中的实践(转载加总结)
  6. 【CKA考试笔记】三、kubernetes集群管理
  7. php实现dota天梯、wow竞技场、lol排位赛匹配加分算法ELO
  8. word把选择答案弄到题目里_word2003考试选择题及答案
  9. 小团队真的适合引入SpringCloud微服务吗?
  10. ES6 之 for-of 以及 生成器