/**
前端页面,点击按钮下载报告,跳转到后台处理程序,处理完跳回前端页面
*/
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
/**
jsp servelt MVC模式
*/
SXSSFWorkbook wb=new SXSSFWorkbook();
//假设需要写入表格的数据是data
//则data最好组成List<Object[]>
List<Object[]> data =service.selectxxxxx();//去dao层查询数据,组装,第一个集合是一个表头的数组,
//然后第二个是表头下第一行的数据数组,以此类推
//数据写入表格
writeArrayToExcel(wb,wb.createSheet(),data.size(),data.get(0).length,data);
//(SXSSFWorkbook wb,SXSSFSheet sheet,int rows,int cells,List<Object[]> data)
//最后的数据就在wb对象中
FileModel filemodel=new FileModel();
filemodel.setFileName("xxxxxx");//设置文件名称
filemodel.setFileContentType(FileModel.XLSX);//设置文件类型
ByteArrayOutputStream os=new ByteArrayOutputStream();//new字节数组输出流对象
wb.write(os);//把wb写入到输出流中
filemodel.setContent(os.toByteArray());//设置文件内容
// 然后把filemodel放到session里,比如( FileModel,filemodel),同时放入一个参数,比如(DataComplete,"Y")
-------end
//FileModel类
public class FileModel implements Serializable(){
public static final String XLSX="application/vnd.openxmlformats-officedocumnet.spreadsheetml.sheet;charset=utf-8";
private String filename;
private String FileContentType;
private byte[] content;
//提供get和set方法
xxxxxxxxxx
}
/**
跳回前端jsp页面,页面一加载就初始化一个方法
*/
funtion filedownloadOnLoad(){
var dataComplete ='<%=request.getAttribute("DataComplete")%>';
if(dataComplete=='Y'){
windows.open("/downfile");//跳转到此路径
<%request.removeAttribute("DataComplete")%>
}
}
//通过servlet配置匹配到此路径,进入servlet处理类,比如FileDownServlet
public class FileDownServlet extends HttpServlet(){
//重写doget dopost方法
public void doGet(HttpServletRequest req,HttpServletResponse response){
FileModel filemodel=(FileModel)session.getAttribute("FileModel");
response.reset();
response.resetBuffer();
response.setContentType(filemodel.getFileContentType);
//response.setHeader();
ServletOutputStream output=response.getOutputStream();
BufferOutputStream bos=new BufferOutputStream(output);
bos.write(filemodel.getContent());
}
public void doPost(HttpServletRequest req,HttpServletResponse response){
doGet(req,response);
}
}
/*
数组写入Excel
*/
public static void writeArrayToExcel(SXSSFWorkbook wb,SXSSFSheet sheet,int rows,int cells,List<Object[]> data){
SXSSFRow row[]=new SXSSFRow[rows];//new行对象
SXSSFCell cell[]=new SXSSFCell[cells];//new单元格对象
Font font=wb.createFont();//创造字体对象
font.setFontName("Times New Roman");//设置字体
//for循坏嵌套
for(int i=0;i<row.length;i++){
row[i]=sheet.createRow(i);//得到第i行
for(int j=0;j<cell.length;j++){
cell[j]=row[i].createCell(j);//得到第i行第j列 单元格
cell[j]=setCellValue(convertString(data.get(i)[j]));//给单元格设置值
}
}
}
pubilc static String convertString(Object value){
if(value==null){
return "";
}else{
return value.toString();
}
}
数据写入Ecxel并下载伪代码
最新推荐文章于 2024-01-24 09:15:09 发布