有的时候因为我们需要将页面上的表格数据导出到Excel表。我们可以写一个导出的java接口。
这个接口先在服务器上写一份Excel文件,然后再写一份到用户这。至于为什么要现在服务器上先写一份,可能是为了备份啥的把。。。
这个接口需要的参数有:
1.查询需要导出的List数据的条件参数
2.HttpServletRequest
3.HttpServletResponse
下面是逻辑
String filename = new RandomGUID.getUUID32() + ".xls";
//在服务器上创建一个exportexcel文件夹(如果这个exportexcel文件夹不存在的话)
String dirpath = request.getSession().getServletContext().getRealPath("/") + "exportexcel";
File dir = new File(dirpath);
if(!dir.exists)
dir.mkdirs();//如果目标文件夹不存在则创建新的文件夹
String fileuri = dirpath + File.separator + filename;
//假设我们已经通过接口的第一个参数获取到要导出的List数据了,这里暂定list
//设置表头
String btList[] = {"编号", "姓名", "年龄"};
//第一步,创建一个webbook,对应一个Excel文件
HSSWorkbook wb = new HSSWorkbook();
//第二步,在webook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet();
//第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int) 0);
//第四步,创建单元格,并设置表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//创建一个居中格式
for(short i = 0; i < (short) btList.length; i++){
HSSFCell cell = row.createCell((short) i);
cell.setCellValue(btList[i]);
cell.setCellStyle(style);
}
//设置背景颜色
style.setFillBackGroundColor(Font.COLOR_NORMAL);
int j = 1;//记录行数
//下面遍历list,将数据写在每一列上
for(int i = 0; i < list.size(); i++){
//创建一行
HSSFRow datarow = sheet.createRow((int) j);
//创建这行的一格
HSSFCell cell0 = datarow.createCell(0);
//将值写入这一格
cell0.setCellValue(写表头里面第一个字段也就是编号的值);
cell0.setCellStyle(style);//设置该单元格的格式
//写这一行的其他格子同理
...
j++;
}
//将webbook的内容写入服务器那个文件里
FileOutputStream fout = new FileOutputStream(fileuri);
wb.write(fout);
fout.close();
/**到这里,数据已经导出到服务器上的fileuri路径下了**/
/**下面做的就是相当于把服务器上的文件下载下来**/
//设置下载的文件名字以及编码格式
String name = new String("信息.xls".getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment:filename=" + name);
InputStream in = new FileInputStream(new File(fileuri));
OutputStream out = response.getOutputStream();
int b;
while((b = in.read() != -1){
out.write(b);
}
in.close();
out.close();