数据写入Ecxel并下载伪代码

/**
前端页面,点击按钮下载报告,跳转到后台处理程序,处理完跳回前端页面
*/



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();
            }
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java-请多指教

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值