Java用开源工具POI简单手写Excel
今天为大家带来的是用阿帕奇开源的工具类POI用代码写一个Excel,很多人可能会说,我用手填Excel不是一样的吗,但是在对于业务需求上来说,代码是为了简化重复操作,所以一旦大批量重复导入到数据人为可能会很累.
如果大家觉得有点麻烦可以参考我的这篇文章,使用国内Hutool简单批量处理Excel,点我查看
这里我们为什么不用Hutool因为Hutool也是封装了POI所以我们直接用原生的可拓展性强!
话不多说先上依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
接下来进入代码操作
// 1. 创建Excel文件
SXSSFWorkbook workbook = new SXSSFWorkbook();
// 2. 创建第一个Sheet1
Sheet sheet = workbook.createSheet("Sheet1");
// 3. 设置字体样式(这里相当于一个字体的格式,可多次使用,建议封装)
// 3.1 创建字体类
Font font = workbook.createFont();
// 3.2 设置字体大小
font.setFontHeightInPoints((short) 20);
// 3.3 设置文字字体
font.setFontName("等线");
// 3.4 是否加粗
font.setBold(true);
---------- 更多字体Api可以自行百度 ---------------
// 4 创建单元格格式
// 4.1 创建单元格类
CellStyle cellStyle = workbook.createCellStyle();
// 4.2设置垂直对齐
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 4.3 设置对齐方式
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// 4.4 设置收缩以适合
cellStyle.setShrinkToFit(true);
// 4.5 将上面的字体放入
cellStyle.setFont(font);
// 5.合并日期占两行(4个参数,分别为起始行,结束行,起始列,结束列)
// 行和列都是从0开始计数,且起始结束都会合并
// 这里是合并excel中日期的两行为一行
CellRangeAddress cellAddresses = new CellRangeAddress(0,1,0,6);
// 6. 将合并的格式插入Sheet不可重复否则报错
sheet.addMergedRegion(cellAddresses);
--------------------以上是格式-----------------------------
// 开始填写一个单元格
// 首先找到你需要填充的行 我简称为Y轴 注意是从0开始,就算被合并了单元格就是一行一行数直到合并的单元格第一个下标
Row row = sheet.createRow(0); // 意思为读取第一行
// 设置行高 这里不做必要参数可不填,不填为默认
row.setHeight((short) (60 * 40));
// 找到需要填写的列 我简称为X轴 ,就算被合并了单元格就是一行一行数直到合并的单元格第一个下标
Cell cell = row.createCell(0); // 意思为找到第一行第一列(为A1)
// 这里将我们上面的写好的样式插入,所以建议封装样式
cell.setCellStyle(cellStyle);
// 插入内容
cell.setCellValue("这是一个标题");
效果如下图
我们这里也可以用HttpServletResponse 或者写到本地,这里仅做为拓展
// 假设我们按照上面的方法把所有数据已经写好了我们需要保存到本地
SXSSFWorkbook workbook = new SXSSFWorkbook();
// 这里我假设写到本地桌面上,记住尾缀一定要写对
FileOutputStream out = new FileOutputStream(new File("C:\\Users\\Desktop\\test.xlsx"));
workbook .write(out) // 这样我们就把弄好的文件写到桌面了
----------**以下是通过HttpServletResponse写出浏览器下载** --------
/*由于我也不知道是什么原因网页调接口解析Response接卸乱码,
好像是Excel不信任,但是通过浏览器直接访问下载不会乱码,如果有大佬能解决请
留言,我这里唯一解决的办法就是把东西通过Zip压缩文件写出去.
*/
rs.setHeader("Accept-Language", "zh-cn");
rs.setHeader("Content-Disposition", "attachment;filename=" + new String("测试.zip".getBytes(), StandardCharsets.ISO_8859_1));
// 添加压缩内容
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
zos.putNextEntry(new ZipEntry("测试.xlsx"));
// zos.write(bytes);
workbook.write(zos);
zos.closeEntry();
zos.flush();
// 开始下载
byte[] finalBytes = baos.toByteArray();
OutputStream out = rs.getOutputStream();
out.write(finalBytes);
out.flush();
out.close();
好了在这里我们一个简单的Excel就教完了,其实这里面还有很多可自行拓展,更多Api可以自行百度,或者查看官网,如果想查看如何使用模板的话可以参考我这篇文章点我查看