当前位置:网站首页>【poi导出excel之XSSFWorkbook】
【poi导出excel之XSSFWorkbook】
2022-08-08 16:24:00 【一个搬砖的农民工】
POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。
- HSSF:Excel97-2003版本,扩展名为.xls。一个sheet最大行数65536,最大列数256。
- XSSF:Excel2007版本开始,扩展名为.xlsx。一个sheet最大行数1048576,最大列数16384。
- SXSSF:是在XSSF基础上,POI3.8版本开始提供的支持低内存占用的操作方式,扩展名为.xlsx。
因为xssf是将数据存在内存,所以为了防止内存溢出,就出现了sxssf,例:
SXSSFWorkbook w3= new SXSSFWorkbook(1000);
SXSSFWorkbook 设置内存中最多只有1000行数据,当超过这个数据时,就将内存之前的数据删除,并且会在硬盘中生成临时文件。从而保证了低内存消耗。
注:针对 SXSSF Beta 3.8下,会有临时文件产生
1、XSSFWorkbook 生成excel
// 1、创建工作表
XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
XSSFSheet xssfSheet = xssfWorkbook.createSheet("sheet名称");
XSSFRow xssfRow; // 行
XSSFCell xssfCell; // 列
// 2、在sheet中创建行,注意判断 第一行是否已经创建,否则会覆盖之前的数据
xssfRow = xssfSheet.getRow(1);
if (xssfRow == null) {
xssfRow = xssfSheet.createRow(1);
}
// 3、创建单元格
xssfCell = xssfRow.createCell(1);
// 4、设置单元格内容
xssfCell.setCellValue("测试");
// 5、导出excel
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("表名.xlsx", "UTF-8"));
ServletOutputStream out = response.getOutputStream();
xssfWorkbook.write(out);
out.close();
xssfWorkbook.close();
2、合并单元格
把上面第2步到第4步替换成如下
(注:创建的单元格和值要取合并单元格左上角第一个)
// 创建合并单元格(int firstRow, int lastRow, int firstCol, int lastCol)
CellRangeAddress range = new CellRangeAddress(1, 1, 2, 5);
// 创建行
xssfRow = xssfSheet.getRow(range.getFirstRow());
if (xssfRow == null) {
xssfRow = xssfSheet.createRow(range.getFirstRow());
}
// 创建列
xssfCell = xssfRow.createCell(range.getFirstColumn());
// 设置单元格内容
xssfCell.setCellValue("测试");
// 添加合并单元格到sheet
xssfSheet.addMergedRegion(range);
// 设置单元格样式:
CellStyle style = xssfWorkbook.createCellStyle();
// 1、水平\垂直居中
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
// 2、设置背景色
style.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 全部填充
// 3、字段加粗
XSSFFont font = xssfWorkbook.createFont();
font.setBold(true);
style.setFont(font);
// 4、设置单元格样式为黑色实线(不是合并单元格,如果是合并单元格用下面第5个)
style.setBorderBottom(BorderStyle.THICK); //下边框
style.setBorderLeft(BorderStyle.THICK); //左边框
style.setBorderTop(BorderStyle.THICK); //上边框
style.setBorderRight(BorderStyle.THICK); //右边框
xssfCell.setCellStyle(style);
// 5、设置合并边框样式为黑色实线(放最后以免样式被覆盖)
RegionUtil.setBorderBottom(BorderStyle.THICK, range , xssfSheet);
RegionUtil.setBorderRight(BorderStyle.THICK, range , xssfSheet);
RegionUtil.setBorderTop(BorderStyle.THICK, range , xssfSheet);
RegionUtil.setBorderLeft(BorderStyle.THICK, range , xssfSheet);
单元格对应颜色:POI 设置Excel单元格背景色
3、单元格设置下拉列表
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("导入模板");
// 1、设置表头
。。。。。
// 2、为第3列设置下拉选项
String[] arr = {
"选项1","选项2"};
sheet.addValidationData(addValidationData(sheet, arr, 3));
/** * 设置下拉列表 * * @param sheet * @param datas * @param index * @return */
private XSSFDataValidation addValidationData(XSSFSheet sheet, String[] datas, Integer index) {
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(datas);
CellRangeAddressList addressList = null;
XSSFDataValidation validation = null;
addressList = new CellRangeAddressList(1, 100000, index, index);// 开始结束行,index表示开始和结束列
validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
// 这两行设置单元格只能是列表中的内容,否则报错
validation.setSuppressDropDownArrow(true);
validation.setShowErrorBox(true);
return validation;
}
边栏推荐
- 基于华为云ModelArts的水表读数识别开发实践【华为云至简致远】
- 9. cuBLAS Development Guide Chinese Version--Configuration of Atomic Mode in cuBLAS
- NSSCTF部分复现
- All volunteers V853 chip Tina RTSP environment set up
- 高数_证明_基本初等函数的导数公式
- 非常菜的一个批量布置waf脚本
- 小实验:实现一个用于计算(包括加减乘除)的小程序
- 使用 FasterTransformer 和 Triton 推理服务器加速大型 Transformer 模型的推理
- mmdetection最新版食用教程(一):安装并运行demo及开始训练coco
- 使用FastApi服务解决程序反复调试导致速度过慢的问题(以tsfresh为例)
猜你喜欢

用于视觉语言导航的自监督三维语义表示学习

手把手教你uniapp接入聊天IM即时通讯功能-源码分享

Groovy XML JSON

leetcode 31. 下一个排列(实现next_permutation 函数)

华为云分布式缓存服务Redis开通及使用规划教程【华为云至简致远】

Dry goods: design high concurrency architecture from scratch

EMQ畅谈IoT数据基础软件开源版图,引领本土开源走向全球

UTF-8 BOM文件导致配置文件无法读取

Taro小程序跨端开发入门实战
![ImportError: numpy.core.multiarray failed to import [cv2, matplotlib, PyTorch, pyinstaller ]](/img/4c/21f6707e771ca7a21e467331b9b8e5.jpg)
ImportError: numpy.core.multiarray failed to import [cv2, matplotlib, PyTorch, pyinstaller ]
随机推荐
非常菜的一个批量布置waf脚本
Understanding of redis slice cluster
NFT质押挖矿分红系统开发逻辑功能介绍
The situation of the solution of the equation system and the correlation transformation of the vector group
pytorch安装过程中出现torch.cuda.isavailable()=False问题
找工作的我看了国聘app
浅学软件逆向笔记(2)
mmdetection最新版食用教程(一):安装并运行demo及开始训练coco
VIT:Transformer进军CV的里程碑
【uniapp小程序】视图容器cover-view
redis切片集群的理解
bzoj1097 [POI2007]旅游景点atr
api的封装
[Unity entry plan] Use the double blood bar method to control the blood loss speed of the damage area
bzoj1251 序列终结者
Grafana配置LDAP认证
hdu2475 Box
Groovy XML JSON
bzoj3693 round table hall theorem + segment tree
R语言(数值、列表、矩阵)上应用函数(sqrt、round、mean、log)、将矩阵所有数据求对数、就矩阵整体的均值、使用apply函数计算矩阵matrix的行均值、列均值、trim设置返回结果精度