Java公共下载xlsx表格,带数据
import com.uloo.autoerp.budget.util.TableStyle;
import net.sf.json.JSONObject;
import org.apache.poi.hssf.usermodel.*;
import org.springframework.http.MediaType;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
public class Workbook {
/**
* 下载表格带数据
* @param httpServletResponse
* @param list 数据list
* @param header 表头数组
* @param columnNameS 表头对应类属性数组,需要和表头循序相同,给列上锁在属性名称后拼接:1({"属性名:1","属性名"})是给第一个属性名的列上锁,表格不锁,列锁不起作用;
* @param name 下载表格的名称
* @param TableLocks 是否给表格上锁
* @throws IOException
*/
public void DownloadTheData(HttpServletResponse httpServletResponse,List list,String[] header,String[] columnNameS,String name,boolean TableLocks) throws IOException {
// 第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet("Worksheet");
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int) 0);
row.setHeight((short) 600);
TableStyle tableStyle=new TableStyle(wb);
HSSFCellStyle style = tableStyle.getStylelock();
HSSFCellStyle style1 = tableStyle.getStyleunlock();
for (int a=0;a<header.length;a++){
HSSFCell cell = row.createCell(a);
sheet.setColumnWidth(a, 10500);
cell.setCellValue(header[a]);
cell.setCellStyle(style);
}
if(list.size()>0){
for (int i=0;i<list.size();i++){
JSONObject jsonObject=JSONObject.fromObject(list.get(i));
row = sheet.createRow(i+1);
row.setHeight((short) 600);
HSSFCell c =null;
for(int a=0;a<columnNameS.length;a++){
c=row.createCell(a);
String[] column=columnNameS[a].split(":");
c.setCellValue(jsonObject.getString(column[0]));
if(column.length>1&&column[1].equals("1")){
c.setCellStyle(style);
}else {
c.setCellStyle(style1);
}
}
}
}
if(TableLocks){
sheet.protectSheet("123456");
}
this.download(httpServletResponse,wb,name);
}
public void download(HttpServletResponse httpServletResponse, HSSFWorkbook wb,String name) throws IOException {
//响应类型为application/octet- stream情况下使用了这个头信息的话,那就意味着不想直接显示内容
httpServletResponse.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
//attachment为以附件方式下载
httpServletResponse.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(name+".xlsx",
"utf-8"));
/**
* 代码里面使用Content-Disposition来确保浏览器弹出下载对话框的时候。
* response.addHeader("Content-Disposition","attachment");一定要确保没有做过关于禁止浏览器缓存的操作
*/
//httpServletResponse.setHeader("Cache-Control", "No-cache");
httpServletResponse.flushBuffer();
wb.write(httpServletResponse.getOutputStream());
//wb.clone();
}
}
样式需要自己写,style为锁定样式,style1为不锁定的样式
来源:CSDN
作者:qq_42810273
链接:https://blog.csdn.net/qq_42810273/article/details/103602409