在我的程序中,在客户端(jsp页面)输入数据,然后将数据传入serlvet,servlet中调用javaben 中的一个方法,此方法中用POI 来把 客户端传送来的数据保存到一个excel 中里面. 问题是:
1.直接在bean 里面用FileOutputStream 可以生成一个excel文件到服务器的指定路径下.
但是 ,如何在客户端通过选择保存路径,把excle文件保存到客户端.
//
生成的 excel文件到服务器的指定路径下 ,那么假如我们把这个文件放到服务器根目录下的file下。例如 www/file/a.xls。那么用一个JSP的下载页专门下载这个文件不就行了吗。或者生成后马上调用下载页。 download.jsp?fileurl=file/a.xls
1.直接在bean 里面用FileOutputStream 可以生成一个excel文件到服务器的指定路径下.
但是 ,如何在客户端通过选择保存路径,把excle文件保存到客户端.
//
生成的 excel文件到服务器的指定路径下 ,那么假如我们把这个文件放到服务器根目录下的file下。例如 www/file/a.xls。那么用一个JSP的下载页专门下载这个文件不就行了吗。或者生成后马上调用下载页。 download.jsp?fileurl=file/a.xls
OutputStream os = response.getOutputStream();
HSSFWorkbook wb = new HSSFWorkbook();
............wb.write(os);.............
public class ExportExcel {
//数据源
private Vector vector ;
public ExportExcel(Vector vector){
this.vector = vector ;
}
/**
* 对Vector数据源将其里面的数据导入到excel表单
* @param fieldName[] 导出到excel文件里的表头名
* @param sheetName 工作表的名称
* @param output java输出流
*/
public void getExcel(String[] fieldName,String sheetName,OutputStream output){
//产生工作薄对象
HSSFWorkbook workbook = new HSSFWorkbook();
//产生工作表对象
HSSFSheet sheet = workbook.createSheet();
//为了工作表能支持中文,设置字符集为UTF_16
workbook.setSheetName(0, sheetName, HSSFWorkbook.ENCODING_UTF_16);
//产生一行
HSSFRow row = sheet.createRow(0);
//产生单元格
HSSFCell cell ;
//写入各个字段的名称
for(int i=0;i<fieldName.length;i++){
//创建第一行各个字段名称的单元格
cell = row.createCell((short)i);
//设置单元格内容为字符串型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//为了能在单元格中输入中文,设置字符集为UTF_16
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//给单元格内容赋值
cell.setCellValue(fieldName[i]);
}
System.out.println("vector.size()="+vector.size());
//写入各条记录,每条记录对应excel表中的一行
for(int i=0;i<vector.size();i++){
row = sheet.createRow(i+1);
Vector v = (Vector)vector.get(i);
for(int j=0;j<v.size();j++){
cell = row.createCell((short)j);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(v.get(j).toString());
}
}
try {
output.flush();
workbook.write(output);
} catch (IOException e) {
e.printStackTrace();
System.out.println("Output is closed");
}
}2:servlet类
public class AcdtExcelServlet extends HttpServlet{ public void doGet (HttpServletRequestrequest,HttpServletResponseresponse)
throws IOException{
response.setContentType("application/vnd.ms-excel");
AcdtExcel db = new AcdtExcel();
Vector vector = db.getAcdtExcel();
String[] fieldName = {"系统编号","发生纬度","年平均日交通量"};
String sheetName = "所有事故信息";
ExportExcel export = new ExportExcel(vector);
export.getExcel(fieldName, sheetName, response.getOutputStream());
response.getOutputStream().flush();
response.getOutputStream().close();
}
}3:在web.xml中配置servlet以上,我写的时候,是利用Vector来作为数据源的,不过你可以根据实际情况,比如说list,Object[][]等等,这些都应该不是问题.