欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

postman导出excel文件(postman批量发送请求)

程序员文章站 2023-12-01 19:15:58
poi 工具类,excel的快速导入导出,excel模板导出,word模板导出,可以仅仅5行代码就可以完成excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得你尝试目前来说,eas...

poi 工具类,excel的快速导入导出,excel模板导出,word模板导出,可以仅仅5行代码就可以完成excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得你尝试

目前来说,easypoi确实方便,官网也提供了三种不同的版本,它在开源中国还,还是非常出名的,用的人非常多,也是对他的一个认可。

postman导出excel文件(postman批量发送请求)

小编目前的项目,也是用这个来做,今天我们来做个excel的导入导出例子,看看怎么使用?

包体引入

目前官方提供最新版本是4.2.0,但是我在使用过程中,总是报错,时间关系就没怎么去查找,有兴趣的同学可以呀研究一下,类找不到,这个是apache的一个类,估计是新版本需要引入别的包,没去仔细追究。

java.lang.noclassdeffounderror: org/apache/poi/xssf/usermodel/xssfworkbook
        <!-- springboot核心web -->
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-web</artifactid>
        </dependency>

        <!-- 引入easypoi包 -->
        <dependency>
            <groupid>cn.afterturn</groupid>
            <artifactid>easypoi-spring-boot-starter</artifactid>
            <version>4.1.0</version>
        </dependency>
        
        <dependency>
            <groupid>commons-fileupload</groupid>
            <artifactid>commons-fileupload</artifactid>
            <version>1.4</version>
        </dependency>

编写导入导出工具类

/**
 * excel枚举类型
 * @author:溪云阁
 * @date:2020年5月29日
 */

public enum exceltypeenum {

    xls("xls"), xlsx("xlsx");

    private string value;

    private exceltypeenum(string value) {
        this.value = value;
    }

    public string getvalue() {
        return value;
    }

    public void setvalue(string value) {
        this.value = value;
    }
}
/**
 * excel导出工具类
 * @author:溪云阁
 * @date:2020年5月29日
 */
@component
public class excelexportutils {

    @autowired
    private httpservletresponse response;

    /**
     * 导出excel
     * @author 溪云阁
     * @param list 泛型数据
     * @param title 标题
     * @param sheetname sheet的名称
     * @param pojoclass 需要导出的对象
     * @param filename 文件名称
     * @param iscreateheader 是否创建表头
     * @throws ioexception void
     */
    public void exportexcel(list<?> list, class<?> pojoclass, string title, string sheetname, string filename,
            boolean iscreateheader) throws ioexception {
        final exportparams exportparams = new exportparams(title, sheetname, exceltype.xssf);
        exportparams.setcreateheadrows(iscreateheader);
        baseexport(list, pojoclass, filename, exportparams);
    }

    /**
     * 导出excel
     * @author 溪云阁
     * @param list 泛型数据
     * @param title 标题
     * @param sheetname sheet的名称
     * @param pojoclass 需要导出的对象
     * @param filename 文件名称
     * @param response
     * @throws ioexception void
     */
    public void exportexcel(list<?> list, class<?> pojoclass, string title, string sheetname, string filename)
            throws ioexception {
        baseexport(list, pojoclass, filename, new exportparams(title, sheetname, exceltype.xssf));
    }

    /**
     * 导出excel
     * @author 溪云阁
     * @param list 泛型数据
     * @param pojoclass 需要导出的对象
     * @param filename 文件名称
     * @param exportparams 文件书香
     * @param response
     * @throws ioexception void
     */
    public void exportexcel(list<?> list, class<?> pojoclass, string filename, exportparams exportparams)
            throws ioexception {
        baseexport(list, pojoclass, filename, exportparams);
    }

    /**
     * 多个sheet导出
     * @author 溪云阁
     * @param list
     * @param filename
     * @throws ioexception void
     */
    public void exportexcel(list<map<string, object>> list, string filename) throws ioexception {
        baseexport(list, filename);
    }

    /**
     * 最基础的对象导出
     * @author 溪云阁
     * @param list 数据列表
     * @param pojoclass 导出对象
     * @param filename 文件名称
     * @param exportparams 导出文件属性
     * @throws ioexception void
     */
    private void baseexport(list<?> list, class<?> pojoclass, string filename, exportparams exportparams)
            throws ioexception {
        final workbook workbook = excelexportutil.exportexcel(exportparams, pojoclass, list);
        downloadexcel(filename, workbook);
    }

    /**
     * 最基础的多sheet导出
     * @author 溪云阁
     * @param list 多个不同数据对象的列表
     * @param filename 文件名称
     * @throws ioexception void
     */
    private void baseexport(list<map<string, object>> list, string filename) throws ioexception {
        final workbook workbook = excelexportutil.exportexcel(list, exceltype.hssf);
        downloadexcel(filename, workbook);
    }

    /**
     * 文件下载
     * @author 溪云阁
     * @param filename 文件名称
     * @param workbook exce对象
     * @throws ioexception void
     */
    private void downloadexcel(string filename, workbook workbook) throws ioexception {
        servletoutputstream output = null;
        try {
            final string downloadname = urlencoder.encode(filename + "." + exceltypeenum.xlsx.getvalue(), "utf-8");
            response.setcharacterencoding("utf-8");
            response.setheader("content-type", "application/vnd.ms-excel");
            response.setheader("content-disposition", "attachment;filename=" + downloadname);
            output = response.getoutputstream();
            workbook.write(output);
        }
        catch (final exception e) {
            throw new ioexception(e.getmessage());
        }
        finally {
            if (output != null) {
                output.flush();
                output.close();
            }
        }
    }

}
/**
 * excel导入工具类
 * @author:溪云阁
 * @date:2020年5月29日
 */
@component
public class excelimportutils {

    /**
     * 从指定位置获取文件后进行导入
     * @author 溪云阁
     * @param filepath 文件路径
     * @param titlerows 表格标题行数,默认0
     * @param headerrows 表头行数,默认1
     * @param pojoclass 上传后需要转化的对象
     * @return
     * @throws ioexception list<t>
     */
    public <t> list<t> importexcel(string filepath, integer titlerows, integer headerrows, class<t> pojoclass)
            throws exception {
        if (strings.isempty(filepath)) {
            return null;
        } else {
            final importparams params = new importparams();
            // 表格标题行数,默认0
            params.settitlerows(titlerows);
            // 表头行数,默认1
            params.setheadrows(headerrows);
            // 是否需要保存上传的excel
            params.setneedsave(true);
            // 保存上传的excel目录
            params.setsaveurl("/excel/");
            return excelimportutil.importexcel(new file(filepath), pojoclass, params);
        }
    }

    /**
     * 上传文件导入
     * @author 溪云阁
     * @param file
     * @param titlerows 标题行
     * @param headerrows 表头行
     * @param needverfiy 是否检验excel内容
     * @param pojoclass 导入的对象
     * @return
     * @throws exception list<t>
     */
    public <t> list<t> importexcel(multipartfile file, integer titlerows, integer headerrows, boolean needverfiy,
            class<t> pojoclass) throws exception {
        if (file == null) {
            return null;
        } else {
            return baseimport(file.getinputstream(), titlerows, headerrows, needverfiy, pojoclass);
        }

    }

    /**
     * 最基础导入
     * @author 溪云阁
     * @param inputstream
     * @param titlerows 表格标题行数,默认0
     * @param headerrows 表头行数,默认1
     * @param needverify 是否需要检测excel
     * @param pojoclass 导入的对象
     * @return
     * @throws ioexception list<t>
     */
    private <t> list<t> baseimport(inputstream inputstream, integer titlerows, integer headerrows,
            boolean needverify, class<t> pojoclass) throws exception {
        if (inputstream == null) {
            return null;
        } else {
            final importparams params = new importparams();
            params.settitlerows(titlerows);
            params.setheadrows(headerrows);
            params.setsaveurl("/excel/");
            params.setneedsave(true);
            params.setneedverify(needverify);
            return excelimportutil.importexcel(inputstream, pojoclass, params);
        }

    }

}

编写导入导出对象

这里,为了覆盖更全一点,我分别用了不同的类型来做实验,数字类型采用numberformat进行格式化操作。

/**
 * 用户信息
 * @author:溪云阁
 * @date:2020年5月29日
 */
public class user implements serializable {

    // 数字格式化
    private numberformat nf = numberformat.getnumberinstance();

    private static final long serialversionuid = 1l;

    @excel(name = "用户id", ordernum = "0", width = 15)
    @setter
    @getter
    private long userid;

    @excel(name = "性别", ordernum = "1", width = 15, replace = { "男_1", "女_2" }, suffix = "孩")
    @setter
    @getter
    private int sex;

    @excel(name = "金钱", ordernum = "2", width = 15)
    @setter
    private double money;

    public string getmoney() {
        return nf.format(money);
    }

    @excel(name = "用户信息", ordernum = "3", width = 15)
    @setter
    @getter
    private string username;

    @excel(name = "价格", ordernum = "4", width = 15)
    @setter
    @getter
    private float price;

    @excel(name = "时间", ordernum = "5", width = 15, format = "yyyy-mm-dd")
    @setter
    @getter
    private date now;

}

编写测试方法

/**
 * excel导入导出
 * @author:溪云阁
 * @date:2020年5月29日
 */
@api(tags = { "app服务:数据接口" })
@restcontroller
@requestmapping("view/ie")
public class importexportcontroller {

    @autowired
    private excelexportutils excelexportutils;

    @autowired
    private excelimportutils excelimportutils;

    /**
     * 导出用户信息
     * @author 溪云阁 void
     */
    @apioperation(value = "导出excel")
    @getmapping(value = "/exportexcel")
    public void exportexcel() throws exception {
        final list<user> userlist = new arraylist<>();
        for (int i = 0; i < 10; i++) {
            final user user = new user();
            user.setuserid(i);
            user.setsex(1);
            user.setmoney(12332123 + i);
            user.setusername("小明" + i);
            user.setprice(23.1f + i);
            user.setnow(new date());
            userlist.add(user);
        }
        excelexportutils.exportexcel(userlist, user.class, "用户信息", "员工信息的sheet", "用户信息表");
    }

    /**
     * 导入用户信息
     * @author 溪云阁
     * @param file
     * @return
     * @throws ioexception object
     */
    @apioperation(value = "导入excel")
    @getmapping(value = "/importexcel")
    public responsemsg<list<user>> importexcel(@requestparam("file") multipartfile file) throws exception {
        final list<user> userlist = excelimportutils.importexcel(file, 1, 1, false, user.class);
        return msgutils.buildsuccessmsg(userlist);
    }

}

导出结果

在导出中,直接在浏览器输入地址接口,结果如截图所示

其中,金钱,时间上,我们分别进行了格式化

postman导出excel文件(postman批量发送请求)

导入结果

把刚刚导出来的文件,直接导入进去,这里采用postman进行操作,其中要注意的点,我已经用红色的圈圈标出来。

从实验结果上看,已经可以导入进去,并且把数据返回来

postman导出excel文件(postman批量发送请求)

问题

在导入进去的构成中,这里留下一个问题给同学自行解决,导入的金额是0,可自行研究解决