赞
踩
目录
@Excel 作用到field上,是对Excel一列的一个描述
@ExcelCollection 表示一个集合,主要针对一对多的导出
@ExcelEntity 表示一个继续深入导出的实体,但没太多实际意义,只是告诉系统这个对象里面有通样导出的字段
@ExcelIgnore 和名字一样表示这个字段被忽略导出过程
@EcxelTarget 这个是作用于最外层的对象,描述这个对象的id,支持这个对象可以针对不同的导出做出不同处理
@Excel注解相关属性 :
用在field属性上面,是对于excel的一个描述
name:[String]生成excel表中的列名
needMerge: [boolean]是否需要纵向合并单元格
orderNum:[String]用于指定Excel列中的顺序
savepath:【String】指定导出excel中图片的保存路径
type: 【String】导出类型 1文本 2图片 3函数 4数字 ,默认是文本
width: 【Double】指定导出excel列的宽度
isImportField:【boolean】 是否是导入的字段,如果没有说明是错误的excel
exportFormat:【String】导出excel的时间格式
importFormat:【String】导入excel的时间格式
format:【String】 相当于同时设置了exportFormat和importFormat
imageType:【int】导出类型 1从filed读取 2是从数据库中读取 默认是文件
suffix:【String】文字后缀,如%98变为98%
模拟将一个集合对象到处到excel表格中
User类:
-
- @ExcelTarget("users")
- public class User implements Serializable {
- @Excel(name = "编号")
- private Integer id;
- @Excel(name = "姓名")
- private String name;
- @Excel(name = "年龄",suffix = "*") //在列的后面加上"*"
- private Integer age;
- @Excel(name = "生日",width = 35.0,format = "yyyy-MM-dd")
- private Date bir;
- @Excel(name = "状态",replace = {"未删除_1","删除_0"}) //用"未删除替换1"
- private String status;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public Date getBir() {
- return bir;
- }
-
- public void setBir(Date bir) {
- this.bir = bir;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
- }
测试类:
- /**
- * 模拟数据库中的数据
- * @return
- */
- public List<User> getUsers(){
- List<User> users = new ArrayList<>();
- for (int i = 0; i < 5; i++) {
- User user = new User();
- user.setId(i);
- user.setName("小王"+i);
- user.setAge(i);
- user.setBir(new Date());
- if(i%2 == 0){
- user.setStatus("1");
- }else {
- user.setStatus("0");
- }
- users.add(user);
- }
- return users;
- }
-
- @Test
- public void testExport() throws Exception{
- //获取数据
- List<User> users = getUsers();
- //导出excel
- //参数1:ExportParams导出配置对象 参数2:导出的类型 参数3:导出的数据集合
- Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户信息列表", "用户信息"), User.class, users);
- //将excel写入指定位置
- FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\LiuBuJun\\Desktop\\预约信息表格\\aa.xls");
- workbook.write(fileOutputStream);
- fileOutputStream.close();
- workbook.close();
- }
测试结果:
注意:
我们将我们刚刚导出的数据再次导入让其输出:
实体类:
- @ExcelTarget("emps")
- public class Emp {
-
- @Excel(name = "编号")
- private Integer id;
- @Excel(name = "姓名")
- private String name;
- @Excel(name = "年龄",suffix = "*") //在列的后面加上"*"
- private Integer age;
- @Excel(name = "生日",width = 35.0,format = "yyyy-MM-dd")
- private Date bir;
- @Excel(name = "状态",replace = {"未删除_1","删除_0"}) //用"未删除替换1"
- private String status;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public Date getBir() {
- return bir;
- }
-
- public void setBir(Date bir) {
- this.bir = bir;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- @Override
- public String toString() {
- return "Emp{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", age=" + age +
- ", bir=" + bir +
- ", status='" + status + '\'' +
- '}';
- }
- }
测试类:
- @Test
- public void testImport() throws Exception{
- ImportParams params = new ImportParams();
- params.setTitleRows(1);//标题占几行 告诉熊哪行开始读取
- params.setHeadRows(1);//header占几行
- //params.setStartSheetIndex(2);从第一个sheet开始读物,默认是1
- List<Emp> emps = ExcelImportUtil.importExcel(new FileInputStream("C:\\Users\\LiuBuJun\\Desktop\\预约信息表格\\aa.xls"), Emp.class, params);
- emps.forEach(System.out::println);
- }
测试结果:
由此可见easypoi相比apach的poi而言还是较为方便的。包含了许多功能,有时间再继续验。
另外在说一下最近遇到的小问题,就是可能公司与第三方合作的时候,他们会发送表格数据来让我们排查问题,这个时候我们得根据excel表格中的某一列中的数据数据去我们数据库中做一个in查询,但是当表格中的数据量太大时,我们将列中国的数据一个粘贴复制太费事费力。
换句话说就是将表格中元素用单引号引起来并且用逗号隔开、
代码如下:
- @Test
- public void testImport() throws Exception{
- ImportParams params = new ImportParams();
- params.setTitleRows(1);//标题占几行 告诉熊哪行开始读取
- params.setHeadRows(1);//header占几行
- //params.setStartSheetIndex(2);从第一个sheet开始读物,默认是1
- List<Emp> emps = ExcelImportUtil.importExcel(new FileInputStream("C:\\Users\\LiuBuJun\\Desktop\\预约信息表格\\aa.xls"), Emp.class, params);
- StringBuffer buffer = new StringBuffer();
- String collect = emps.stream().map(emp -> "\'" + emp.getAge() + "\'").collect(Collectors.joining(","));
- System.out.println(collect);
- }
测试结果:
着样的话我们就不用一个个粘贴复制excel表格中的数据了。有关poi使用链接:poi导入/导出_set sail_2021的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。