ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springboot生成excel并保存在服务器指定路径

2021-08-02 11:02:59  阅读:433  来源: 互联网

标签:springboot get dataList excel fileName ++ import 服务器 response


package com.gllic.workweixin.utils;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

/**
* @program: workweixin-mobile-api
* @ClassName ExcelUtil
* @description:
* @author: Marlo
* @create: 2021-07-29 10:06
* @Version 1.0
**/
public class ExcelUtil {
/**
* 导出类
*
* @param response 响应
* @param fileName 文件名
* @param columnList 每列的标题名
* @param dataList 导出的数据
*/
public static void uploadExcelAboutUser(HttpServletResponse response, String fileName, List<String> columnList, List<List<String>> dataList) {
//声明输出流
FileOutputStream output = null;
//设置响应头
//setResponseHeader(response, fileName);
try {
//获取输出流
output = new FileOutputStream("C:\\myselefzxq\\image\\testFile.xls");
//内存中保留1000条数据,以免内存溢出,其余写入硬盘
SXSSFWorkbook wb = new SXSSFWorkbook(1000);
//获取该工作区的第一个sheet
Sheet sheet1 = wb.createSheet("sheet1");
int excelRow = 0;
//创建标题行
Row titleRow = sheet1.createRow(excelRow++);
for (int i = 0; i < columnList.size(); i++) {
//创建该行下的每一列,并写入标题数据
Cell cell = titleRow.createCell(i);
cell.setCellValue(columnList.get(i));
}
//设置内容行
if (dataList != null && dataList.size() > 0) {
//序号是从1开始的
//int count =0;
//外层for循环创建行
for (int i = 0; i < dataList.size(); i++) {
Row dataRow = sheet1.createRow(excelRow++);
//内层for循环创建每行对应的列,并赋值
for (int j = 0; j < dataList.get(0).size(); j++) {//由于多了一列序号列所以内层循环从-1开始
Cell cell = dataRow.createCell(j);
cell.setCellValue(dataList.get(i).get(j));
/*if(j==0){//第一列是序号列,不是在数据库中读取的数据,因此手动递增赋值
//cell.setCellValue(count++);
}else{//其余列是数据列,将数据库中读取到的数据依次赋值
cell.setCellValue(dataList.get(i).get(j));
}*/
}
}
}/*

//准备将Excel的输出流通过response输出到页面下载
//八进制输出流
response.setContentType("application/octet-stream");

//这后面可以设置导出Excel的名称,此例中名为student.xls
response.setHeader("Content-disposition", "attachment;filename=employee.xls");

//刷新缓冲
response.flushBuffer();*/

//workbook将Excel保存到指定路径
wb.write(output);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 关闭输出流
if (output != null) {
output.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

/*
设置浏览器下载响应头
*/
private static void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

标签:springboot,get,dataList,excel,fileName,++,import,服务器,response
来源: https://www.cnblogs.com/Marlo/p/15089001.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有