package com.nuvole.util;
|
// @formatter:off
|
import jakarta.servlet.http.HttpServletResponse;import lombok.val;import org.apache.poi.hssf.usermodel.*;
|
import java.net.URLEncoder;import java.util.Date;import java.util.List;import java.util.Locale; /**
|
* .-~~~~~~~~~-._ _.-~~~~~~~~~-.
|
* __.' @Author ~. .~ 代码无Bug `.__
|
* .'// liu.q \./ (秘籍) \\`.
|
* .'// [916000612@qq.com] | 欲练神功 引刀自宫 \\`.
|
* .'// .-~"""""""~~~~-._ | _,-~~~~"""""""~-. \\`.
|
* .'//.-" 2019-07-17 `-. | .-' 16:54 "-.\\`.
|
* .'//______.============-.. \ | / ..-============.______\\`.
|
*.'______________________________\|/______________________________`.
|
*
|
* @Description :
|
*/
|
// @formatter:on
|
|
public class ExportExcel {
|
public static void exportExcel(String fileName, List<String> titles, List<List<Object>> rows, HttpServletResponse response) throws Exception {
|
|
// 声明一个工作薄
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
// 生成一个表格
|
HSSFSheet sheet = workbook.createSheet();
|
// 设置表格默认列宽度为15个字节
|
sheet.setDefaultColumnWidth((short) 18);
|
|
//设置标题
|
HSSFRow title = sheet.createRow(0);
|
for (int i = 0; i < titles.size(); i++) {
|
HSSFCell cell = title.createCell(i);
|
HSSFRichTextString text = new HSSFRichTextString(titles.get(i));
|
cell.setCellValue(text);
|
}
|
|
//设置数据
|
HSSFCellStyle cellStyle = workbook.createCellStyle();
|
for (int i = 0; i < rows.size(); i++) {
|
HSSFRow row = sheet.createRow(i + 1);
|
List<Object> clo = rows.get(i);
|
int index = 0;
|
for (Object o : clo) {
|
HSSFCell cell = row.createCell(index);
|
if (o instanceof Date) {
|
HSSFDataFormat format = workbook.createDataFormat();
|
cellStyle.setDataFormat(format.getFormat("yyyy-mm-dd HH:mm:ss"));
|
cell.setCellStyle(cellStyle);
|
cell.setCellValue((Date) o);
|
} else if (o instanceof Double) {
|
HSSFDataFormat format = workbook.createDataFormat();
|
cellStyle.setDataFormat(format.getFormat("#,##0.00"));
|
cell.setCellStyle(cellStyle);
|
cell.setCellValue(Double.valueOf(o.toString()));
|
} else {
|
HSSFDataFormat format = workbook.createDataFormat();
|
cellStyle.setDataFormat(format.getFormat("@"));
|
cell.setCellStyle(cellStyle);
|
cell.setCellValue(o.toString());
|
}
|
index++;
|
}
|
}
|
// 告诉浏览器用什么软件可以打开此文件
|
response.setHeader("content-Type", "application/vnd.ms-excel");
|
|
//解决 苹果浏览器乱码问题
|
val ua = CommonUtil.getRequest().getHeader("User-Agent").toLowerCase(Locale.ENGLISH);
|
if (ua.indexOf("macintosh") > -1 && ua.indexOf("chrome") < 0) {
|
fileName = new String(fileName.getBytes(), "iso8859-1");
|
} else {
|
fileName = URLEncoder.encode(fileName, "utf-8");
|
}
|
|
// 下载文件的默认名称
|
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
|
response.flushBuffer();
|
workbook.write(response.getOutputStream());
|
}
|
}
|