postman导出excel文件(postman批量发送请求)
程序员文章站
2023-11-27 09:28:40
poi 工具类,excel的快速导入导出,excel模板导出,word模板导出,可以仅仅5行代码就可以完成excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得你尝试目前来说,eas...
poi 工具类,excel的快速导入导出,excel模板导出,word模板导出,可以仅仅5行代码就可以完成excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得你尝试
目前来说,easypoi确实方便,官网也提供了三种不同的版本,它在开源中国还,还是非常出名的,用的人非常多,也是对他的一个认可。
小编目前的项目,也是用这个来做,今天我们来做个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进行操作,其中要注意的点,我已经用红色的圈圈标出来。
从实验结果上看,已经可以导入进去,并且把数据返回来
问题
在导入进去的构成中,这里留下一个问题给同学自行解决,导入的金额是0,可自行研究解决