开发中容易碰到这种需要从对接文档或者网页中提取静态表格内容的工作,之后可能需要将表格内容写成一个Constant类或者List对象,或者枚举内。下面是我的实现步骤
1.提取表格
先在桌面新建一个Excel文件,使用office Excel打开,选择数据-----自网站
输入表格所在的网页的地址
点击确定
从查询出的网页众多表格中获取自己需要的那个,点击加载
经等待一个完整的表格数据就进入excel中了。
2:通过excelutil获取excel表格内容,将其遍历到所需对象上,填充List
2.1:添加依赖
<!-- https://mvnrepository.com/artifact/net.oschina.likaixuan/excelutil -->
<dependency>
<groupId>net.oschina.likaixuan</groupId>
<artifactId>excelutil</artifactId>
<version>3.0.1</version>
</dependency>
这个是在开源中国网站看到的一个人写的excel工具类
https://www.oschina.net/p/excelutil
具体的使用可以去他自己的网站
http://likaixuan.top/excelUtil/doc/v2#quickstart
接着参照他的demo教程,可以
定义一个对象保存表格数据
package com.fangcang.hotel.util;
import com.lkx.util.Excel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* @ClassName com.fangcang.hotel.util.CountryDemo
* @Author WP
* @Date 2019/12/13 14:23
* @Description
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class CurrencyDemo {
@Excel(title = "currencyCode")
private String currencyCode;
@Excel(title = "currencyDefinition")
private String currencyDefinition;
}
然后再在需要的地方获取到Excel中的内容
List<Object> objects = ExcelUtil.readXls("C:\\Users\\ASUS\\Desktop\\currency.xlsx", CurrencyDemo.class);
List<CurrencyDemo> currencyDemos = PropertyCopyUtil.transferArray(objects, CurrencyDemo.class);
currencyDemos.stream().collect(Collectors.toMap(b -> b.getCurrencyCode(), b -> b.getCurrencyDefinition())).forEach((k,v)->{
System.err.printf("%s:%s",k,v).println();
});
其中的PropertyCopyUtil.java为
package com.fangcang.common.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
public class PropertyCopyUtil {
public static <T,S> S transfer(T t,Class<S> s){
return (S) JSONObject.parseObject(JSONObject.toJSONString(t),s);
}
public static <T> List<T> transferArray(Object object,Class<T> t){
return JSON.parseArray(JSON.toJSONString(object),t);
}
}
结果:
控制台输出正确