NutzCN Logo
问答 nutz如何去把一个table表格导出成excel
发布于 2020天前 作者 qq_ff330a3f 2893 次浏览 复制 上一个帖子 下一个帖子
标签:

现在想做一个把表格导出成excel的操作,不知道后台该怎么写,以及前台该怎么调用,能否简单指点下?

21 回复

表格,指的是页面上的 表格??? 不是数据库里面的表???

@wendal 是的,就是页面上的一个table,我就是不太清楚后台怎么写,以及前台该怎么去接收后台返回的数据。。。

提供个思路咯:

先用js把table变成一个string[X][Y], 然后转为json,

$.ajax({
   url : ...
   data : JSON.stringify(tablelist),
});

服务器接收:

@AdaptBy(type=JsonAdaptor.class)
public void xxx(@Param("..")String[][] list, HttpServletRequest req) {
    // 然后操作poi生成xls
}

@wendal 后台方法不用写一个OK(“raw”)这样的注解吗?我就是这里不太明白,其实怎么获取数据,已经poi什么的我都知道,就是不知道后台跟前台怎么交互。。。怎么能一调用后台的方法之后,然后前台就会弹出那个下载的提示框。。。

ajax的话并不会弹框, 需要iframe之类的

至于服务器端要做的,只是在resp的header里面放一个 Content-Disposition , 可以参考RawView类实现文件下载的代码

入口方法可以直接声明HttpServletResponse resp参数,然后你想怎么玩就怎么玩

@wendal 没有太明白你说的需要iframe是什么意思。能简单讲一下吗?确实,我这个肯定得用ajax去获取数据,然后返回要下载的excel文件流或者其他格式,而且是不是还得在服务器的某个位置上生成这个文件呢?

@qq_ff330a3f 单纯用ajax,浏览器不会弹窗提示下载

@wendal 兽总,想问下,RawView在哪个下面啊?我去好好看看先,如果有不懂的我再问你好了~

org.nutz.mvc.view.RawView

@wendal

@IocBean
@At("/download")
@Ok("raw:stream")
@Fail("http:500")
public class DownloadModule {
    
    @At
    @Ok("raw:stream")
    public void down(HttpServletResponse response) throws Exception{
        File f = new File("d://undo.png");
        InputStream is = new FileInputStream(f);
        OutputStream os = response.getOutputStream();
        os = new FileOutputStream(f);
        byte[] buffer = new byte[400];
        int length = 0;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
        os.close();
    }
}

页面调用代码:

<title>项目库列表</title>
</head>
<body class="pos-r">
    <a href="<%=basePath%>download/down">点击下载</a>
</body>
</html>

下载倒是自动下载了,但是不是那个图片的格式。。。

自行写响应的时候,用 @Ok("void")

@wendal 在最上面还是在入口方法那里呢?

@qq_ff330a3f 入口方法

@wendal 好的,兽总,最后还是想问一下,我在那个ajax里面怎么用你说的那个iframe呢?能指点下吗?

用poi,和nutz关系不大
1、用poi生成excel表格,保存到本地
2、通过nutz下载excel文件

为什么不考虑前端实现呢?

@crskyp 嗯,我用的方法就是你说的那种方法,但是我得在ajax里面操作,就是不知道该怎么弹出那个提示下载的框

@wentao-love 你说的前端实现是指的什么意思呢?能简单说一下吗?

重点关注下Content-Disposition,搜索下

response.addHeader("Content-Disposition", "attachment; "+fileNameKey+"=\"" + realFileName + "\"");

在页面中添加个iframe标签,jquery设置标签src值

@crskyp 谢谢大神拉,我已经按照这种方式解决了~~~

添加回复
请先登陆
回到顶部