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. 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》
  2. php的引用变量与销毁机制
  3. alertdialog.builder 自定义弹窗
  4. C语言-定义与初始化总结
  5. DSP6455的EMIFA口
  6. xcode 写代码没有补全 提示
  7. 将maven项目托管到github
  8. 9.JSP运行原理与JSP页面的基本结构
  9. scrapy自定义Request的缓存策略(减少内存占用)
  10. 中国5G务实发展 向大规模商用推进
  11. 通过userAgent判断用户浏览器
  12. SAS安装后处理错误的解决方法
  13. Android手机会中电脑病毒么,安卓手机中木马病毒怎么办
  14. virtualbox win7虚拟机启动exe提示“DX11 could not switch resolution”解决方案
  15. Android源码查看下载
  16. java 基础: 一些稀奇古怪的好东西总结 丰富知识面
  17. in作为介词的用法_in的用法是什么,用于什么中
  18. Spark --入门简介
  19. 社区计算机知识,社区公共基础知识备考指导——计算机知识
  20. endnote参考文献排版_如何用 EndNote 编辑适合投稿杂志的参考文献格式

热门文章

  1. android 以太网设置静态ip
  2. ezsqli(GYCTF-WEB)
  3. 解决Vista/Server 2008/win 7 右下角网络连接出现黄色感叹号问题
  4. Python字典常用方法有哪些?
  5. 桌面右键新建没有txt文件(windows系统)
  6. 如何在Google Meet中共享屏幕
  7. 计算机考研网校班,计算机考研网校
  8. 《非诚勿扰2》搞笑经典台词
  9. 擅长出圈的完美世界,为什么又将赛道押在了邮箱?
  10. c语言与汇编语言子程序,用汇编语言设计程序实现10!,并用调用子程序的方法实现1!+2!+3!+…...