JAvaはブラウザがexcelファイルをダウンロードすることを実現します


以前、簡単版のexcelエクスポート(簡単、ローカルエクスポート)を書いたことがありますが、今日はブラウザからデータをexcelファイルにエクスポートするということですが、実はブラウザでこのexcelファイルをダウンロードしていると見ることもできます
実際の仕事生活では、このような場面がよくあります.ページ上のテーブルをローカルexcelファイルにエクスポートする必要があります.表面的にはページから直接エクスポートされますが、実際にはサービス側で実行され、まずフロントエンドのフィルタ条件を取得し、条件に基づいてクエリー方法を呼び出し、データを調べた後、ワークシート、ワークシート、行、列などを作成します(ここではPOIのjarパッケージを導入する必要があります).そして、テーブルにデータを入れ、excelを出力ストリームに書き込み、最後に出力ストリームをHttpService Response出力ストリームに書き込み、フロントエンドでこのインタフェースをトリガすることで、ブラウザでexcelファイルをダウンロードすることができます.
次に、一つの例を通して感じてみましょう.
/**
 *         
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(value="/exportStudent",method=RequestMethod.POST)
//  ,  StudentRequest StudentResponse          
//StudentResponse        ,StudentRequest       (         )
public StudentResponse exportStudent(StudentRequest request,HttpServletResponse response) {
//     
HSSFWorkbook wb = new HSSFWorkbook();
//     
HSSFSheet sheet = wb.createSheet();
//       
HSSFCellStyle curStyle = wb.createCellStyle();
HSSFFont curFont = wb.createFont();
//    
HSSFRow nRow = sheet.createRow(0);
HSSFCell nCell = nRow.createCell(0);
//      (       ......)
nCell.setCellStyle(this.mainTitleStyle(curStyle, curFont));
//      
int rowNo = 0;
int colNo = 0;
//   
String[] title;
title = new String[]{ "  ","  ","  ","  "};
//           
nRow = sheet.createRow(rowNo++);
for(int i = 0;i studentList = response  .getStudentList();
//        
for (StudentDto dto : studentList ) {
colNo = 0;//    
//         
nRow = sheet.createRow(rowNo++);
//  (    ,        )
nCell = nRow.createCell(colNo++);
nCell.setCellValue(dto.getNum());
nCell.setCellStyle(this.textStyle( curStyle, curFont));
//  
nCell = nRow.createCell(colNo++);
nCell.setCellValue(dto.getAge);
nCell.setCellStyle(this.textStyle( curStyle, curFont));
//  
nCell = nRow.createCell(colNo++);
nCell.setCellValue(dto.getSex);
nCell.setCellStyle(this.textStyle(curStyle, curFont));
//  
nCell = nRow.createCell(colNo++);
nCell.setCellValue(dto.getClass);
nCell.setCellStyle(this.textStyle( curStyle, curFont));
}
//   ,excel      ,            
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// excel   
wb.write(byteArrayOutputStream);
//      			
String dateTime = DateFormatUtils.format(new Date(), "yyyyMMddHHmm");
String outFile = "    -"+dateTime + ".xls";
//         
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//     
outFile = response.encodeURL(new String(outFile.getBytes("gb2312"), "iso8859-1"));
//  Servlet         ,           
response.addHeader("Content-Disposition", "attachment;filename=" + outFile);
//      
response.setContentLength(byteArrayOutputStream.size());
//  Cookie    response 
Cookie cookie = new Cookie("fileDownload", "true");
cookie.setPath("/");
response.addCookie(cookie);
//    response    
ServletOutputStream outputstream = response.getOutputStream();
byteArrayOutputStream.writeTo(outputstream);

byteArrayOutputStream.close();
outputstream.flush();	
} catch (Exception e) {
parkVehicleResponse.setMsg("      ");
return parkVehicleResponse;
}
return null;
}
******              ,                 ,                 
/**
 *        
 * @param curStyle
 * @param curFont
 * @return
 */
private HSSFCellStyle mainTitleStyle( HSSFCellStyle curStyle, HSSFFont curFont) {
curStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);	//    
curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//    
curFont.setFontName("  ");	//  
curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //   
curFont.setFontHeightInPoints((short) 16);//    
curStyle.setFont(curFont); //     
return curStyle;
}	
/**
 *       
 * @param curStyle
 * @param curFont
 * @return
 */
private HSSFCellStyle textStyle(HSSFCellStyle curStyle, HSSFFont curFont) {
curStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);//   
curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//    
curStyle.setWrapText(true); //     
curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //   
curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //   
curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); //   
curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); //   
curFont.setFontName("Times New Roman");//  
curFont.setFontHeightInPoints((short) 10);//    
curStyle.setFont(curFont); //     
return curStyle;
}

フロントエンドでは、あるイベント(例えば、クリック)でこのURL(「/exportStudio」)をトリガーすれば、ブラウザでファイルをエクスポートすることができます.