POI 导出横版A4word,并设置excel宽度(固定不变形)
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要点
- ooxml-schemas 依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency>
- 设置 :横屏板式
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宽度(固定不变形)相关推荐
- vue导出横版pdf并解决内容分割问题
准备工作和vue导出PDF一样,接下来讲的是一些区别 首先是div中 div中将要导出的div层添加ref,相关子内容标签加上 class="item" 为了后续内容分割处理 &l ...
- java poi 数据透视,java 利用poi导出默认以表格展示的excel透视表
前言: 从前,我是一个前端程序猿,怀着对打通任(前)督(后)二(开)脉(发)的梦想转了后端,自学两礼拜java+spring全家桶,直接上项目实战.最近接到一需求:将业务数据导出一张透视表. 需求开发 ...
- poi导出带有下拉选项的Excel,解决下拉选项过多报错的问题
/*** 下载Excel模板*/ @GetMapping("/downloadTemplate") public void downloadTemplate(HttpServlet ...
- java将jsp页面表格导出excel表格数据_简单的POI导出JSP页面表格数据到excel
数据库中的equipment表数据: 读取数据库中表数据的代码TestExcel.java public class TestExcel extends BaseAction{/** * @param ...
- 通过poi导出复杂excel既有合并行又有合并列
通过poi导出形如以下的复杂excel: 此excel里左边和右边的用户可以自由选择是否导出这几列,中间的题型有单选.多选.填空.排序 这是详情表,还有分值表如下: 占比表如下: 我自己写了个针对上面 ...
- POI导出表格Java代码实现
POI导出表格 1. 引入依赖 2. Excel导出核心代码 2.1 核心代码导入包 2.2 核心util代码 2.3 Controller表格导出实现 3. Excel导出结果展示 3.1 导出链接 ...
- poi设置word表格单元格宽度_xwpftable设置宽度;POI操作Word设置表格宽度
poi 操作word里表格,如设置表格宽度.行高.表格样式等. 1.表格或单元格宽度: 默认TblW的type属性为STTblWidth.AUTO,即自动伸缩.所以要调整为指定类型:STTblWidt ...
- POi 导出word 表格,设置页面横版
https://blog.csdn.net/qq_26408545/article/details/110669104 poi 导入,高版本不兼容,建议以下版本: <dependency> ...
- Springboot整合Poi导出excel(简单版)
一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...
最新文章
- 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》
- php的引用变量与销毁机制
- alertdialog.builder 自定义弹窗
- C语言-定义与初始化总结
- DSP6455的EMIFA口
- xcode 写代码没有补全 提示
- 将maven项目托管到github
- 9.JSP运行原理与JSP页面的基本结构
- scrapy自定义Request的缓存策略(减少内存占用)
- 中国5G务实发展 向大规模商用推进
- 通过userAgent判断用户浏览器
- SAS安装后处理错误的解决方法
- Android手机会中电脑病毒么,安卓手机中木马病毒怎么办
- virtualbox win7虚拟机启动exe提示“DX11 could not switch resolution”解决方案
- Android源码查看下载
- java 基础: 一些稀奇古怪的好东西总结 丰富知识面
- in作为介词的用法_in的用法是什么,用于什么中
- Spark --入门简介
- 社区计算机知识,社区公共基础知识备考指导——计算机知识
- endnote参考文献排版_如何用 EndNote 编辑适合投稿杂志的参考文献格式
热门文章
- android 以太网设置静态ip
- ezsqli(GYCTF-WEB)
- 解决Vista/Server 2008/win 7 右下角网络连接出现黄色感叹号问题
- Python字典常用方法有哪些?
- 桌面右键新建没有txt文件(windows系统)
- 如何在Google Meet中共享屏幕
- 计算机考研网校班,计算机考研网校
- 《非诚勿扰2》搞笑经典台词
- 擅长出圈的完美世界,为什么又将赛道押在了邮箱?
- c语言与汇编语言子程序,用汇编语言设计程序实现10!,并用调用子程序的方法实现1!+2!+3!+…...