Java使用HSSFWorkbook生成Excel
HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。
1 创建对象
HSSFWorkbook workbook = new HSSFWorkbook();
2 样式
2.1 基础样式
//创建样式
HSSFCellStyle cellStyle = workbook.createCellStyle();
//水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//自动换行
cellStyle.setWrapText(true);
//设置字体
HSSFFont cellFont = workbook.createFont();
cellFont.setFontName("宋体");
cellStyle.setFont(cellFont);
2.2 背景颜色
//创建背景颜色颜色样式
HSSFCellStyle colorStyle = workbook.createCellStyle();
colorStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//随便设置一个颜色
colorStyle.setFillForegroundColor(IndexedColors.LIGHT_TURQUOISE.getIndex());
//自定义填充颜色 替换刚刚设置的颜色
HSSFPalette customPalette = workbook.getCustomPalette();
customPalette.setColorAtIndex(IndexedColors.LIGHT_TURQUOISE.getIndex(), (byte) 255,(byte) 244, (byte) 144);
colorStyle.setAlignment(HorizontalAlignment.CENTER);
colorStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//设置背景会去除边框,因此需要重新添加
colorStyle.setBorderBottom(BorderStyle.THIN);
colorStyle.setBorderLeft(BorderStyle.THIN);
colorStyle.setBorderTop(BorderStyle.THIN);
colorStyle.setBorderRight(BorderStyle.THIN);
//设置边框颜色
colorStyle.setBottomBorderColor(IndexedColors.CORAL.getIndex());
colorStyle.setTopBorderColor(IndexedColors.CORAL.getIndex());
colorStyle.setLeftBorderColor(IndexedColors.CORAL.getIndex());
colorStyle.setRightBorderColor(IndexedColors.CORAL.getIndex());
//创建边框颜色,灰色
HSSFPalette customPalette2 = workbook.getCustomPalette();
customPalette2.setColorAtIndex(IndexedColors.CORAL.getIndex(), (byte) 208,(byte) 214, (byte) 228);
//ps:如果需要设置合并单元格(在下面介绍)的背景颜色,请先创建好单独的单元格并设置背景,最后进行合并操作,否则无法设置背景颜色
2.3 文字颜色样式
HSSFCellStyle redFont = workbook.createCellStyle();
//设置居中
redFont.setVerticalAlignment(VerticalAlignment.CENTER);
HSSFFont font = workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short)12);
//设置字体
font.setFontName("宋体");
//加粗
font.setBold(true);
font.setColor(Font.COLOR_RED);
redFont.setFont(font);
redFont.setFillBackgroundColor(Font.COLOR_NORMAL);
redFont.setFont(font);
redFont.setWrapText(true);
3 创建单元格并输入数据
//创建个空白的sheet,设置默认的列宽行高
HSSFSheet sheet = workbook.createSheet("我是sheet名");
sheet.setDefaultColumnWidth((short)16);
sheet.setDefaultRowHeight((short)450);
//创建第一行
HSSFRow row = sheet.createRow(0);
//可以单独设置改行的高度
row.setHeightInPoints(52);
//设置excel内容
//合并表格,起始行,结束行,起始列,结束列
sheet.addMergedRegion(new CellRangeAddress(0,0,0,7));
//创建标题,创建第一格,因为合并了,直接装填第一格即可
HSSFCell cell = row.createCell(0);
cell.setCellValue("我是标题");
cell.setCellStyle(cellStyle);
//创建新行,设置每个单元格内容
row = sheet.createRow(1);
//获取第0格
cell = row.createCell(0);
//设置内容
cell.setCellValue("单元格1");
//设置单元格格式
cell.setCellStyle(cellStyle);
cell = row.createCell(1);
cell.setCellValue("单元格2");
cell.setCellStyle(cellStyle);
cell = row.createCell(2);
cell.setCellValue("单元格3");
cell.setCellStyle(cellStyle);
//冻结单元格,要冻结的列数,要冻结的行数,可以冻结表头,方便用户观看
sheet.createFreezePane(0,2);
//ps:在excel中换行符为\r\n,可创建多行内容
4 为单元格设置下拉框
DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
//下拉框的范围,起始行,结束行,起始列,结束列
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(3,400,3,3);
//设置选项内容
DataValidationConstraint explicitListConstraint = dataValidationHelper.createExplicitListConstraint(new String[]{"重要","普通"});
//装填
DataValidation validation = dataValidationHelper.createValidation(explicitListConstraint, cellRangeAddressList);
sheet.addValidationData(validation);
CellRangeAddressList cellRangeAddressList2 = new CellRangeAddressList(3,400,4,4);
DataValidationConstraint explicitListConstraint2 = dataValidationHelper.createExplicitListConstraint(new String[]{"111","222","333"});
DataValidation validation2 = dataValidationHelper.createValidation(explicitListConstraint2, cellRangeAddressList2);
sheet.addValidationData(validation2);
5 为单元格设置时间格式
HSSFCellStyle dateStyle = workbook.createCellStyle();
HSSFDataFormat dataFormat = workbook.createDataFormat();
dateStyle.setDataFormat(dataFormat.getFormat("yyyy-mm-dd"));
//遍历设置格式
for (int i = 3; i <400; i++) {
row = sheet.createRow(i);
for (int j = 9; j <=11; j++) {
cell = row.createCell(j);
cell.setCellStyle(dateStyle);
}
}
//ps:这样设置格式后在使用该模板进行excel导入操作时,会被算存在一行,请先判断不为空再操作
6 生成后返回给前端
6.1 后端发送
HSSFWorkbook workbook = testService.getExportXls();
OutputStream osOut = null;
try{
osOut = response.getOutputStream();
response.setHeader("Content-Disposition", "attachment;");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("utf-8");
workbook.write(osOut);
osOut.flush();
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if(osOut != null){
osOut.close();
}
workbook.close();
}catch (IOException e){
e.printStackTrace();
}
}
6.2 前端接收
//绑定某个按钮
downloadXls(){
//使用什么请求看自己需要
request({
url: `/后端的请求路径`,
method: "get",
responseType: 'blob'
}).then(res=>{
let url = window.URL.createObjectURL(new Blob([res], { type: 'application/vnd.ms-excel' }))
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', '文件名称.xls')
document.body.appendChild(link)
link.click()
document.body.removeChild(link) //下载完成移除元素
window.URL.revokeObjectURL(url) //释放掉blob对象
})
}
Java使用HSSFWorkbook生成Excel的更多相关文章
- 【java】:生成excel
//生成报表公用方法 //excelName: 生成的文件名 //list:时间/日期/描述 //listSelectFiled: 标题 //showContent : 文件内容bean //生成 ...
- Java 利用poi生成excel表格
所需jar包,如下所示 写一个excel工具类 ExcelUtils .java import java.lang.reflect.Field; import java.util.Iterator; ...
- Java 利用 poi 生成 Excel文件的通用例子
在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 生 ...
- java利用poi生成excel文件后下载本地
1.该功能需要poi的jar包,链接: http://pan.baidu.com/s/1migAtNq 密码: 38fx. 2.首先新建一个实体类,用以存放单个数据 public class Test ...
- Apache POI使用指南(HSSFWorkbook生成excel)
说 明: 官网:http://poi.apache.org/ 由于poi的功能多样,可以生成ppt.word.excel.......,本文就以生成excel为例进行说明,相信聪明的你一定能举一反三 ...
- java使用poi生成excel
使用poi生成excel通常包含一下几个步骤 创建一个工作簿 创建一个sheet 创建一个Row对象 创建一个cell对象(1个row+1个cell构成一个单元格) 设置单元格内容 设置单元格样式. ...
- Java利用POI生成Excel强制换行
前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找了 ...
- java操作poi生成excel.xlsx(设置下拉框)下载本地和前端下载
需求:导入excel表格,如果excel有错误,将错误的地方标红,在把数据以excel的形式写出,供用户下载解决方案:1.以实体类的方式接收excel并解析(创建两个集合一个接收正常的数据一个接收错误 ...
- java将HSSFWorkbook生成的excel压缩到zip中
思路:1.写入输入流中. 2.将输入流加到ZipOutputStream压缩流中 List<DocumentModel> list = null; try { list = documen ...
- Java使用poi生成Excel,生成两种表格下拉框
想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...
随机推荐
- CTreeCtrl的用法汇总(转)
一 基础操作 1 插入节点 1)插入根节点 //插入根节点 HTREEITEM hRoot; CString str=L"ROOT" hRoot=nTreeCtrl.Insert ...
- java中的ConcurrentModificationException是什么异常?在哪些场景下会报该异常?
在软件构造实验Lab2的ConcreteVerticesGraph里,需要我们编写remove()方法.移除一个点没有别的方法,只有遍历集合vertices(),找到该点并移除. 当时我没有写上红框中 ...
- 初学银河麒麟linux笔记 第七章 VMWare虚拟机内的qt程序连接串口和网口
QT程序可以正常在虚拟机里的麒麟系统里运行了,但是无法连接网口和串口,这里进行配置 网口连接 与硬件的TCP连接,在虚拟机上设置桥接 再重启就能连上了 串口连接 首先参考 https://blog.c ...
- 16.java八皇后问题
问题描述:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即: 任意两个皇后都不能处于同一行 .同一列或同一斜线上,问有多少种摆法(92). 思路分析:1) 第一个皇后先放第一行第一列2) ...
- 环保行业ERP主要的几大治理区域?
环保行业是指在国民经济结构中,以防治环境污染.改善生态环境.保护自然资源为目的而进行的技术产品开发.商业流通.资源利用.信息服务.工程承包等活动的总称. 哲讯环保ERP行业产业链的上游主要是钢铁.有色 ...
- dart的基本使用
1.windows上环境搭建 (1) 在dart官网上下载对应的sdk安装即可.归档 | Dart (2) 使用vscode开发,安装dart插件和Code Runner插件即可. 2.Dart ...
- CPU 相关知识
参考:https://blog.csdn.net/andy572633/article/details/46834155 lscpu 查看到部分CPU不在线 CPU(s) 4 On-line CPU( ...
- [笔记]gdb调试中一个string变量太长,如何将该string变量完全输出在屏幕上?
来自 https://stackoverflow.com/questions/233328/how-do-i-print-the-full-value-of-a-long-string-in-gdb ...
- linux 复合页( Compound Page )的介绍
1.复合页的定义: 复合页(Compound Page)就是将物理上连续的两个或多个页看成一个独立的大页,它可以用来创建hugetlbfs中使用的大页(hugepage), 也可以用来创建透明大页( ...
- 洛谷 P5721 【入门3】循环结构
P5723 [深基4.例13]质数口袋 1.题目描述 小 A 有一个质数口袋,里面可以装各个质数.他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋. 口袋的负载量就是口袋 ...