chinadim 2008-06-17 16:31
浏览 243
已采纳

poi+webflow 如何实现文件流直接写入到客户端

最近项目要用poi+webflow实现到处excel的功能,直接导出到服务器端以实现,先不想在服务器端保存临时文件,就是当用户点击导出按钮时弹出一个弹出保存框,类似于”目标另存为“

export_flow.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE flow PUBLIC "-//SPRING//DTD WEBFLOW 1.0//EN"
"http://www.springframework.org/dtd/spring-webflow-1.0.dtd">























public class ExportModelExcel {
HSSFWorkbook wb = new HSSFWorkbook();

public FileOutputStream ExportModel(ModelInfo modelInfo) throws Exception {
    System.out.println 
    int sheetNumber = 0;
    HSSFSheet sheet;
    while (sheetNumber < SHEET_HANDLERS.length && modelInfo != null) {
        ISheetHandler sheetHandler = SHEET_HANDLERS[sheetNumber];
        try {
            sheet = wb.createSheet(SHEETS[sheetNumber]);
            sheetHandler.process(sheet, modelInfo, this.getCellHeadStyle(),
                    this.getCellDataStyle());
        } catch (SheetHandlerException e) {
            throw new ModellerException(    ModellerExceptionEnums.EXCEL_MODELLER_EXCEPTION, e);
        }
        sheetNumber++;
    }
    FileOutputStream fileOut = new FileOutputStream("test.xls");
    wb.write(fileOut);
    fileOut.close();
    return fileOut;
}

}

exportexcel.jsp:

<%@ page contentType="application/vnd.ms-excel" %>
<%response.addHeader("Content-Disposition", "attachment;filename=test.xls");%>
${requestScope.fileOut};

现在导出的excel文件打开报excel的格式与文件扩展名指定的格式不一致,打开前请验证文件,点是后,excel中显示 java.io.FileOutputStream@1c0c8b3

用过的兄弟多多指点,先谢了!

  • 写回答

2条回答 默认 最新

  • waterdh1 2008-06-17 18:08
    关注

    晕,程序写错了,大错特错。
    错误1:
    ${requestScope.fileOut};
    这样写最多把这个对象的toString()输出到浏览器。

    错误2:
    ExportModel()这个方法错了
    这里你的实现只是把内容写入了test.xls中,而这个文件是本地的文件。而返回的fileoutputstream已经被使用过了,对后面毫无用处。

    正确的方法应该把excel内容写入浏览器应答对象的输出流中(response.getOutputStream()):

    1,获取HSSFWorkbook 对象wb(已经实例化数据)

    2,jsp中调用wb.write(request.getOutputStream())

    [code="java"]
    <%@ page contentType="application/vnd.ms-excel" %>
    <%response.addHeader("Content-Disposition", "attachment;filename=test.xls");%>
    ${wb.write(response.getOutputStream())};
    [/code]

    大致思路就是这样

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 有偿求码,CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路