服务器端生成excel文件 在客户端保存(POI)

jkgao801 2007-05-16 10:58:07
在我的程序中,在客户端(jsp页面)输入数据,然后将数据传入serlvet,servlet中调用javaben 中的一个方法,此方法中用POI 来把 客户端传送来的数据保存到一个excel 中里面. 问题是:
1.直接在bean 里面用FileOutputStream 可以生成一个excel文件到服务器的指定路径下.
但是 ,如何在客户端通过选择保存路径,把excle文件保存到客户端.
...全文
1070 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yksky 2007-05-17
  • 打赏
  • 举报
回复
呵呵,这个问题,可以利用流来实现,当用户输入数据之后,就把这些数据写入流里面去,之后,再跳到一个servlet里面,设置打开方式为excel,这样,就不用在服务器上先生成一个excel文件,再在jsp页面上去调用这个生成的excel文件,达到动态生成excel文件的目的

1:POI处理类
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[][]等等,这些都应该不是问题.
kimmking 2007-05-17
  • 打赏
  • 举报
回复
response.setContentType("application/vnd.ms-excel");
OutputStream os = response.getOutputStream();

HSSFWorkbook wb = new HSSFWorkbook();
............

wb.write(os);

.............
tangboyong 2007-05-17
  • 打赏
  • 举报
回复
在我的程序中,在客户端(jsp页面)输入数据,然后将数据传入serlvet,servlet中调用javaben 中的一个方法,此方法中用POI 来把 客户端传送来的数据保存到一个excel 中里面. 问题是:
1.直接在bean 里面用FileOutputStream 可以生成一个excel文件到服务器的指定路径下.
但是 ,如何在客户端通过选择保存路径,把excle文件保存到客户端.
//
生成的 excel文件到服务器的指定路径下 ,那么假如我们把这个文件放到服务器根目录下的file下。例如 www/file/a.xls。那么用一个JSP的下载页专门下载这个文件不就行了吗。或者生成后马上调用下载页。 download.jsp?fileurl=file/a.xls
jkgao801 2007-05-17
  • 打赏
  • 举报
回复
yksky(北风) , 你好, 你的回复似乎可以解决我的问题, 但是我还是有点疑问, 能否 ,QQ上 交流一下, 谢谢了.. 398824651

67,517

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧