jxls2在springboot中通过HttpServletResponse导出excel文件乱码

发布于 2021-12-08 10:18:32 字数 2413 浏览 927 评论 2

各位好,本人尝试采用Jxls2通过spring mvc方式导出并下载Excel文件,文件能下载,但是下载下来的文件提示文件已损坏,点击进去出现内容乱码。但是尝试

OutputStream os = new FileOutputStream(new File("D:"+File.separator+"test111.xls"));

是能正常导出excel数据的,不知是否有人遇到过同样的问题,代码如下

package com.example.demo;

import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.web.servlet.view.AbstractView;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;

public class JxlsExcelView extends AbstractView {
    private static final String CONTENT_TYPE = "application/vnd.ms-excel";

    private String templatePath;
    private String exportFileName;

    /**
     * @param templatePath   模版相对于当前classpath路径
     * @param exportFileName 导出文件名
     */
    public JxlsExcelView(String templatePath, String exportFileName) {
        this.templatePath = templatePath;
        if (exportFileName != null) {
            try {
                exportFileName = URLEncoder.encode(exportFileName, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        this.exportFileName = exportFileName;
        setContentType(CONTENT_TYPE);
    }

    @Override
    protected void renderMergedOutputModel(
            Map<String, Object> model,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        Context context = new Context(model);
        response.setContentType(getContentType());
        response.setHeader("content-disposition",
                "attachment;filename=" + exportFileName + ".xls");
        ServletOutputStream os = response.getOutputStream();
        //OutputStream os = new FileOutputStream(new File("D:"+File.separator+"test111.xls"));
        InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath);
        JxlsHelper.getInstance().processTemplate(is, os, context);
        is.close();
    }
}

链接为测试代码源码

http://p59his853.bkt.clouddn.com/demo.zip

项目跑起来后打开http://localhost:8080/swagger-ui.html,点击接口try it out即可测试

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酒几许 2021-12-08 14:46:03

楼主解决了吗 我的也是这个问题 呜呜呜

可是我不能没有你 2021-12-08 11:01:52

看看你的target里面的excel是否能打开,因为maven在你编译的 时候可能会把你的那个excle格式弄乱了.在maven的build里面加上类似于以下的代码

<resources>
	<resource>
		<directory>src/main/resources</directory>
		<filtering>true</filtering>
		<excludes>
			<exclude>**/*.xlsx</exclude>
		</excludes>
	</resource>
	<resource>
		<directory>src/main/resources</directory>
		<filtering>false</filtering>
		<includes>
			<include>**/*.xlsx</include>
		</includes>
	</resource>
</resources>

然后再去试试

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文