首页 > 其他分享 >EasyExcel导入导出

EasyExcel导入导出

时间:2022-11-23 00:11:18浏览次数:71  
标签:String 导出 EasyExcel excel private 导入 nodeExportVO import public

https://easyexcel.opensource.alibaba.com/docs/current/

https://github.com/alibaba/easyexcel

源码可以从github下载调试,相对于poi确实好用很多,但是本质上还是使用的poi做的改造,所以3X之后被动依赖还是poi

1、EasyExcel导出数据

1.1、核心元素

  • excel模板
  • vo
  • ExcelWriter

1.2、导入pom

build 是为了 模板能够编译到target下

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
</dependency>


    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

1.3、模板

src\main\resources\excel\主机记录模板.xlsx

execl内容比较简单不再展示

1.4、两个vo

一个用来接收请求参数,一个用来做excel导出用

import lombok.Data;

import java.util.Date;

@Data
public class NodeVO {
    private String hostName;
    private String hostIp;
    private int status;  // 主机状态 0离线 1在线
    private Date lastUpdateTime;
}

导出的数据模型,注意相关excle注解,详细可参考官网说明,或者github中源码的ReadMe。

这里主要完成字段和excel的对应关系,以及两个核心的format注解。

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.Data;

import java.util.Date;

@Data
public class NodeExportVO {
    @ExcelProperty(value = "主机名", index = 0)
    private String hostName;

    @ExcelProperty(value = "主机IP", index = 1)
    private String hostIp;

    @ExcelIgnore
    private int status;  // 主机状态 0离线 1在线

    @ExcelProperty(value = "主机状态", index = 2)
    private String statusName;

    @ExcelProperty(value = "上报时间", index = 3)
    @DateTimeFormat("YYYY-MM-dd")
    private Date lastUpdateTime;
}

1.5、控制层

/**
 * EasyExcel测试
 */
@RestController
public class EasyExcelController {
    @Autowired
    private IEasyExcelService easyExcelService;

    /**
     * 导出
     */
    @RequestMapping(value = "/export", method = RequestMethod.POST)
    public void export(@RequestBody List<NodeVO> nodeVOList) {
        easyExcelService.export(nodeVOList);
    }
}

1.6、服务层实现类

@Service
public class EasyExcelService implements IEasyExcelService {
    @Override
    public void export(List<NodeVO> nodeVOList) {
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        String fileName = null;
        try {
            fileName = URLEncoder.encode("主机记录", "UTF-8");

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        List<NodeExportVO> nodeExportVOList = nodeVOList.stream().map(nodeVO -> {
            NodeExportVO nodeExportVO = new NodeExportVO();

            BeanUtils.copyProperties(nodeVO, nodeExportVO);
            return nodeExportVO;
        }).collect(Collectors.toList());

        if (!CollectionUtils.isEmpty(nodeExportVOList)) {
            for (NodeExportVO nodeExportVO : nodeExportVOList) {
                int status = nodeExportVO.getStatus();
                String statusName = status == 0 ? "离线" : "在线";
                nodeExportVO.setStatusName(statusName);
            }
        }
        ClassPathResource resource = new ClassPathResource("excel/主机记录模板.xlsx");
        System.out.println(resource.exists());
        ExcelWriter excelWriter = null;
        try {
            excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(resource.getInputStream()).build();
        } catch (IOException e) {
            e.printStackTrace();
        }
        WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
        excelWriter.write(nodeExportVOList, writeSheet);
        excelWriter.finish();
    }
}

谷歌插件进行接口调试

http://localhost:8080/export

post

body

[
	{
		"hostName": "jdit-aliyun",
		"hostIp": "3.182.55.7",
		"status": 1,
		"lastUpdateTime": "2022/11/22 23:22:00"
	}
]

就可以完成下载了。

标签:String,导出,EasyExcel,excel,private,导入,nodeExportVO,import,public
From: https://www.cnblogs.com/hcgk/p/16916968.html

相关文章

  • net中c#教程 不同格式的csv文件如何导入?
    无论你做什么软件,都需要和数据打交道,也肯定会把数据导入或导出,其中就包括对CSV文件的操作。比如某个平台的数据是CSV文件,我们需要把它导入到程序里。今天就实现这个需求,我......
  • conda 导出\入环境/导入以及base环境的处理
    来实习后在配置环境上花费了挺久的时间,但是在不断试错的同时也在提高系统操作的经验。在conda管理下安装opencv一直装不上,我怀疑是我安装的版本太高了导致不兼容。所以选择......
  • 如何将BIM数据导入图新地球(GIS平台)?
    建筑信息模型(BuildingInformationModeling),简称BIM,国家标准GB/T51212-2016《建筑信息模型应用统一标准》将BIM做如下定义:在建设工程及设施全生命周期内,对其物理和功能特......
  • Postgres如何导入Excel数据
    打开Execl文件,另存为CSV格式,逗号隔离。删除CSV文件的第一行,只留下有效数据进入postgres,执行copyone_off_coupon(payload,tag,expire_at)from'C:\Users\DELL\Desktop\ldj......
  • golang如何导出csv格式的文件
    import("fmt""github.com/xormplus/xorm""golang.org/x/text/transform""golang.org/x/text/encoding/simplifiedchinese""io/ioutil""github.com/......
  • vue 项目中,后端返回文件流,导出excel
    之前写过文件流导出excel,这次直接把上次的代码拿过来复制粘贴,但是导出的表格里面没有数据,只显示undefined。这是之前的代码//api接口页面//excel导出接口export......
  • NPOI Excel导入:时间格式2022/5/26导入变成26-5月-2022
    //NPOI导入日期格式处理stringmytime=dateStr.Trim();//dateStr为Excel导入的日期值IFormatProviderculture=newCultureInfo("zh-CN",true);......
  • EsayExcel导出合并单元格(工具类)
    导出合并单元格工具类1.main方法调用publicstaticvoidmain(String[]args){List<GroupExport<ScoreDemo,String>>groupExports=newArrayList<>()......
  • 使用DocumentFormat.OpenXml 从Excel 导入数据
    publicList<DailyStock>ReadExcelFile(stringfileName){List<DailyStock>list=newList<DailyStock>();DataTabledt=ReadExcelFileToDataTable(fi......
  • 55.数据导出到csv文件
    ##导出到csv文件importpandasaspddf=pd.DataFrame({'编号':['1001','1002','1003'],'姓名':['张三','李四','王五'],'总成绩':[740,658,543]......