JAvaはブラウザがexcelファイルをダウンロードすることを実現します
4777 ワード
以前、簡単版のexcelエクスポート(簡単、ローカルエクスポート)を書いたことがありますが、今日はブラウザからデータをexcelファイルにエクスポートするということですが、実はブラウザでこのexcelファイルをダウンロードしていると見ることもできます
実際の仕事生活では、このような場面がよくあります.ページ上のテーブルをローカルexcelファイルにエクスポートする必要があります.表面的にはページから直接エクスポートされますが、実際にはサービス側で実行され、まずフロントエンドのフィルタ条件を取得し、条件に基づいてクエリー方法を呼び出し、データを調べた後、ワークシート、ワークシート、行、列などを作成します(ここではPOIのjarパッケージを導入する必要があります).そして、テーブルにデータを入れ、excelを出力ストリームに書き込み、最後に出力ストリームをHttpService Response出力ストリームに書き込み、フロントエンドでこのインタフェースをトリガすることで、ブラウザでexcelファイルをダウンロードすることができます.
次に、一つの例を通して感じてみましょう.
フロントエンドでは、あるイベント(例えば、クリック)でこのURL(「/exportStudio」)をトリガーすれば、ブラウザでファイルをエクスポートすることができます.
実際の仕事生活では、このような場面がよくあります.ページ上のテーブルをローカル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」)をトリガーすれば、ブラウザでファイルをエクスポートすることができます.