当前位置:网站首页>poi导出excle
poi导出excle
2022-06-27 06:30:00 【Mr_ZhangAdd】
原本想使用别人的轮子,想想还是使用poi,毕竟别人也是封装poi。
过程就是:
创建工作簿、创建工作表、根据传来的数据 创建行、在创建单元格,并赋值 。
最后 封装response,然后写入输出流、然后刷新并输出、输出完毕关闭输出
/**
* 对文件流输出下载的中文文件名进行编码 屏蔽各种浏览器版本的差异性
*
* @throws UnsupportedEncodingException
*/
public static String encodeChineseDownloadFileName(
HttpServletRequest request, String pFileName) throws Exception {
String filename = null;
String agent = request.getHeader("USER-AGENT");
if (null != agent) {
if (-1 != agent.indexOf("Firefox")) {//Firefox
filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes("UTF-8")))) + "?=";
} else if (-1 != agent.indexOf("Chrome")) {//Chrome
filename = new String(pFileName.getBytes(), "ISO8859-1");
} else {//IE7+
filename = java.net.URLEncoder.encode(pFileName, "UTF-8");
filename = filename.replace("+", "%20");
}
} else {
filename = pFileName;
}
return filename;
} public static void exportCustomerGoodsTotalByMonth(HttpServletRequest request,
HttpServletResponse response,
Company company,
List<String> customers,
Map<String, CustomerOrderExortExcleDataDTO> listMap
) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
//设置文件名
String fileName = customers.stream().collect(Collectors.joining("-"));
//创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook();
for (Map.Entry<String, CustomerOrderExortExcleDataDTO> entry : listMap.entrySet()) {
CustomerOrderExortExcleDataDTO customerOrderExortExcleDataDTO = entry.getValue();
List<List<String>> dataList = customerOrderExortExcleDataDTO.getDataList();
//创建一个sheet
HSSFSheet sheet = wb.createSheet(entry.getKey());
//创建表头,如果没有跳过
int headerrow = 0;
List<String> headers = customerOrderExortExcleDataDTO.getColTitleList();//{"订单ID","发货日期","数量"};
if (customerOrderExortExcleDataDTO != null && customerOrderExortExcleDataDTO.getHeadTitle() != null) {
HSSFRow row = sheet.createRow(headerrow);
//表头样式
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 11);
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
HSSFCell cell = row.createCell(0);
cell.setCellValue(customerOrderExortExcleDataDTO.getHeadTitle());
cell.setCellStyle(style);
HSSFCell cell2 = row.createCell(headers.size() - 1);
cell2.setCellStyle(style);
sheet.addMergedRegion(new CellRangeAddress(
0, //first row (0-based)
0, //last row (0-based)
0, //first column (0-based)
headers.size() - 1 //last column (0-based)
));
headerrow++;
}
if (headers != null) {
HSSFRow row = sheet.createRow(headerrow);
//表头样式
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 11);
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
for (int i = 0; i < headers.size(); i++) {
if (i == 0) {
sheet.setColumnWidth(i, 450 * 10);
} else {
sheet.setColumnWidth(i, 350 * 10);
}
HSSFCell cell = row.createCell(i);
cell.setCellValue(headers.get(i));
cell.setCellStyle(style);
}
headerrow++;
}
if (!ObjectUtils.isEmpty(dataList)) {
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 10);
style.setFont(font);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
for (int i = 0; i < dataList.size(); i++) { //行数
HSSFRow row = sheet.createRow(headerrow);
List<String> rowDataList = dataList.get(i);
for (int j = 0; j < rowDataList.size(); j++) { //列数
HSSFCell cell = row.createCell(j);
cell.setCellValue(rowDataList.get(j) + "");
cell.setCellStyle(style);
}
headerrow++;
}
}
}
fileName = fileName + ".xls";
String filename = "";
try {
filename = encodeChineseDownloadFileName(request, fileName);
} catch (Exception e) {
e.printStackTrace();
}
response.reset();
response.setHeader("Content-disposition", filename);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + filename);
response.setHeader("Pragma", "No-cache");
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
}边栏推荐
猜你喜欢

G1 and ZGC garbage collector

多线程带来的的风险——线程安全

427-二叉树(617.合并二叉树、700.二叉搜索树中的搜索、98. 验证二叉搜索树、530.二叉搜索树的最小绝对差)

解决 Win10 Wsl2 IP 变化问题

Assembly language - Wang Shuang Chapter 8 two basic problems in data processing - Notes

2022 cisp-pte (I) document contains

Idea one click log generation

Crawler learning 5--- anti crawling identification picture verification code (ddddocr and pyteseract measured effect)

SQL 注入绕过(一)

快速实现Thread Mesh组网详解
随机推荐
Keep 2 decimal places after multiplying SQLSEVER fields
Instance Tunnel 使用
Configuration of vscode korofileheader
Tar: /usr/local: cannot find tar in the Archive: due to the previous error, it will exit in the last error state
主动学习(active learning)
426 binary tree (513. find the value in the lower left corner of the tree, 112. sum of paths, 106. construct a binary tree from the middle order and post order traversal sequence, 654. maximum binary
Overview of database schema in tidb
[getting started] regular expression Basics
【毕业季】毕业是人生旅途的新开始,你准备好了吗
路由器和交换机的区别
论文阅读技巧
tracepoint
快速实现Thread Mesh组网详解
HTAP Quick Start Guide
一线大厂面试官问:你真的懂电商订单开发吗?
快速实现单片机和手机蓝牙通信
Basic SQL operations in tidb
Altium Designer 19 器件丝印标号位置批量统一摆放
AHB2APB桥接器设计(2)——同步桥设计的介绍
第 299 场周赛 第四题 6103. 从树中删除边的最小分数