注解版poi操作工具

*************************************优雅的分割线 **********************************

分享一波:程序员赚外快-必看的巅峰干货

如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程

请关注微信公众号:HB荷包
在这里插入图片描述
一个能让你学习技术和赚钱方法的公众号,持续更新
*************************************优雅的分割线 **********************************
SimpleExecutor
最近在搭公司新项目的架构,测试的过程中深感导出Excel极为不便,因此就产生了写一个通用导出工具类的想法。写完后经测试发现比较好用,因此将公司相关的代码移除,单独拿出来这个模块进行开源。

项目的GitHub地址:POI操作工具

如果您对本工具比较感兴趣,可以加入下面QQ群进行技术交流:781943947

使用方式:

创建数据库(这个操作就不贴代码了)

导入工程下db目录的数据库

创建类ApiLog(实际开发中换成自己的类),加上注解@Excel

@Data
public class ApiLog implements Serializable {
 
    private static final long serialVersionUID = -3286564461647015367L;
 
    /**
     * 日志id
     */
    @Excel(name = "编号")
    private Integer logId;
 
    /**
     * 请求路径
     */
    @Excel(name = "请求地址")
    private String logUrl;
 
    /**
     * 参数
     */
    @Excel(name = "请求参数")
    private String logParams;
 
    /**
     * 访问状态,1正常0异常
     */
    @Excel(name = "访问状态")
    private Integer logStatus;
 
    /**
     * 异常信息
     */
    @Excel(name = "异常信息")
    private String logMessage;
 
    /**
     * 浏览器UA标识
     */
    @Excel(name = "浏览器标识", autoSize = true)
    private String logUa;
 
    /**
     * 访问controller
     */
    @Excel(name = "控制层")
    private String logController;
 
    /**
     * 请求方式,get、post等
     */
    @Excel(name = "请求方式")
    private String logMethod;
 
    /**
     * 响应时间,单位毫秒
     */
    @Excel(name = "响应时间", isStatistics = true)
    private Long logTime;
 
    /**
     * 请求ip
     */
    @Excel(name = "请求ip")
    private String logIp;
 
    /**
     * 设备MAC
     */
    @Excel(name = "设备号")
    private String logDevice;
 
    /**
     * 创建时间
     */
    @Excel(name = "请求时间")
    private String createdDate;
 
    /**
     * 创建人
     */
    private String createdBy;
 
    /**
     * 创建人姓名
     */
    @Excel(name = "创建人", autoSize = true)
    private String createdName;
 
    /**
     * 返回值
     */
    @Excel(name = "返回值")
    private String logResult;
 
    /**
     * 日志内容
     */
    @Excel(name = "日志内容")
    private String logContent;
 
    /**
     * 日志类型  0:操作日志;1:登录日志;2:定时任务;
     */
    private Integer logType;
 
    /**
     * 操作类型  1查询,2添加,3修改,4删除,5导入,6导出
     */
    private Integer logOperateType;
 
    @Override
    public String toString() {
        return "ApiLog{" +
                "logId=" + logId +
                ", logUrl='" + logUrl + '\'' +
                ", logParams='" + logParams + '\'' +
                ", logStatus=" + logStatus +
                ", logMessage='" + logMessage + '\'' +
                ", logUa='" + logUa + '\'' +
                ", logController='" + logController + '\'' +
                ", logMethod='" + logMethod + '\'' +
                ", logTime=" + logTime +
                ", logIp='" + logIp + '\'' +
                ", logDevice='" + logDevice + '\'' +
                ", createdDate='" + createdDate + '\'' +
                ", createdBy='" + createdBy + '\'' +
                ", createdName='" + createdName + '\'' +
                ", logResult='" + logResult + '\'' +
                ", logContent='" + logContent + '\'' +
                ", logType=" + logType +
                ", logOperateType=" + logOperateType +
                '}';
    }
}

编写Mapper(Service就跳过了)

@Component
public interface ApiMapper {
 
    /**
     * 查询所有
     * @return
     */
    List<ApiLog> findAll();
 
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gej.poi.mapper.ApiMapper">
    <!-- 注意:本内容仅限于风越云力内部传阅,禁止外泄以及用于其他的商业目 -->
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.gej.poi.pojo.ApiLog">
        <id column="log_id" property="logId"/>
        <result column="log_url" property="logUrl"/>
        <result column="log_params" property="logParams"/>
        <result column="log_status" property="logStatus"/>
        <result column="log_message" property="logMessage"/>
        <result column="log_ua" property="logUa"/>
        <result column="log_controller" property="logController"/>
        <result column="log_method" property="logMethod"/>
        <result column="log_time" property="logTime"/>
        <result column="log_ip" property="logIp"/>
        <result column="log_device" property="logDevice"/>
        <result column="created_date" property="createdDate"/>
        <result column="created_by" property="createdBy"/>
        <result column="log_result" property="logResult"/>
        <result column="created_name" property="createdName"/>
    </resultMap>
 
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        log_id, log_url, log_params, log_status, log_message, log_ua, log_controller, log_method, log_time, log_ip, log_device, created_date, created_name, log_result
    </sql>
 
    <select id="findAll" resultMap="BaseResultMap">
        select * from sys_log_api
    </select>
 
</mapper>

编写测试类


@SpringBootTest
@RunWith(SpringRunner.class)
public class ExportTest {
 
    @Autowired
    private ApiMapper apiMapper;
 
    /**
     * 导出测试
     * @throws Exception
     */
    @Test
    public void testExportLog() throws Exception {
        List<ApiLog> list = apiMapper.findAll();
        Workbook workbook = new ExcelExportHandler().createSheet(new ExportParams("测试导出", "最新日志"), ApiLog.class, list);
        OutputStream outputStream = new FileOutputStream(new File("D:/测试.xlsx"));
        workbook.write(outputStream);
    }
 
    /**
     * 导入测试
     * @throws Exception
     */
    @Test
    public void testImportLog() throws Exception {
        InputStream inputStream = new FileInputStream(new File("D:/测试.xlsx"));
        List<ApiLog> apiLogs = new ExcelImportHandler().importExcel(inputStream, ApiLog.class, new ImportParams());
        for (ApiLog apiLog : apiLogs) {
            System.out.println(apiLog);
        }
    }
 
}

最后附上Excel注解的代码

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface Excel {
 
    /**
     * 该列是否需要时间格式化
     */
    boolean needFormat() default false;
 
    /**
     * 时间格式化
     */
    String format() default "";
 
    /**
     * 导出时在excel中每个列的高度 单位为字符,一个汉字=2个字符
     */
    double height() default 10;
 
    /**
     * 导出时的列名。不可重复
     */
    String name();
 
    /**
     * 导出时在excel中每个列的宽 单位为字符,一个汉字=2个字符 如 以列名列内容中较合适的长度 例如姓名列6 【姓名一般三个字】
     * 性别列4【男女占1,但是列标题两个汉字】 限制1-255
     */
    double width() default 10;
 
    /**
     * 是否自动统计数据,如果是统计,true的话在最后追加一行统计,把所有数据求和
     */
    boolean isStatistics() default false;
 
    /**
     * 是否设置列宽自适应
     */
    boolean autoSize() default false;
 
}

*************************************优雅的分割线 **********************************

分享一波:程序员赚外快-必看的巅峰干货

如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程

请关注微信公众号:HB荷包
在这里插入图片描述
一个能让你学习技术和赚钱方法的公众号,持续更新
*************************************优雅的分割线 **********************************
SimpleExecutor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己封装的excel导出/导入,可以根据注解来导出excel.本项目一共有13个类,里面还包含了一个反射工具,一个编码工具,10分值了。下面是测试代码 public class Test { public static void main(String[] arg) throws FileNotFoundException, IOException{ testBean(); testMap(); } public static void testBean() throws FileNotFoundException, IOException{ List l = new ArrayList(); for(int i=0;i<100;i++){ l.add(new MyBean()); } //很轻松,只需要二句话就能导出excel BeanExport be = ExportExcel.BeanExport(MyBean.class); be.createBeanSheet("1月份", "1月份人员信息").addData(l); be.createBeanSheet("2月份","2月份人员信息").addData(l); be.writeFile("E:/test/bean人员信息8.xlsx"); } //如果不想用注解,还能根据MAP导出. public static void testMap () throws FileNotFoundException, IOException{ List l = new ArrayList(); l.add(new MapHeader("姓名","name",5000)); l.add(new MapHeader("年龄","age",4000)); l.add(new MapHeader("生日","birthdate",3000)); l.add(new MapHeader("地址","address",5000)); l.add(new MapHeader("双精度","d",4000)); l.add(new MapHeader("float","f",6000)); List<Map> lm = new ArrayList<Map>(); for(int i=0;i<100;i++){ Map map = new HashMap(); map.put("name","闪电球"); map.put("age",100); map.put("birthdate",new Date()); map.put("address","北京市广东省AAA号123楼!"); map.put("d",22.222d); map.put("f",295.22f); lm.add(map); } MapExport me = ExportExcel.mapExport(l); me.createMapSheel("1月份","广东省人员信息").addData(lm); me.createMapSheel("2月份", "北京市人员信息").addData(lm); me.writeFile("E:/test/map人员信息9.xlsx"); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值