mrdear / easy-excel Goto Github PK
View Code? Open in Web Editor NEWExcel读取导出工具
License: MIT License
Excel读取导出工具
License: MIT License
0.1.0版本excel有一个数组类型的列,代码类型写的是Long,读取未null,0.7.0版本是好的
0.1.0在maven仓库中下载不到
package io.github.mrdear.excel.domain.convert;
import io.github.mrdear.excel.ExcelException;
import java.text.ParseException;
import java.util.Date;
import java.util.function.Function;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.FastDateFormat;
public class StringToDateConvert implements Function<String, Date> {
private static FastDateFormat YMDHMS_ = FastDateFormat.getInstance("yyyy-MM-dd hh:MM:ss");
public StringToDateConvert() {
}
public Date apply(String s) {
if (StringUtils.isEmpty(s)) {
return null;
} else {
try {
return YMDHMS_.parse(s);
} catch (ParseException var3) {
throw new ExcelException(var3);
}
}
}
}
yyyy-MM-dd hh:MM:ss 写错了,正确的是 yyyy-MM-dd HH:mm:ss。
我一开始还以为是xls有问题,稍微浪费了一点时间
如果需要,吾辈可以修改后 Pull Request
再很多时候,吾辈这边的实体类与 VO 是分离的父子类,一般使用 VO 作为数据承载,而实体类仅与数据库对应,那么能否在查找字段时递归向上查找直到 Object
/Serializable
或是全局指定的某个基类?
递归获取字段你可以使用 SuperClassRefUtil
像 Date 一般而言确实应该转换为 yyyy-MM-dd HH:mm:ss
这种人类可读的格式,如果不指定的话就默认使用它就好了,总好过导出的是 43559.4816650926
这种不知道什么鬼的东西。总而言之,约定优于配置应该是最好的!
现在都已经 2019 了,Java8 已经这么久还不打算尝试新的时间 API 么?类似于 LocalDateTime
,LocalDate
,LocalTime
这些常见的时间最好也支持一下吧
目前默认
toString
带T
LocalDateTime 应该可以使用下列方式导出
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
现在不管数据有多长,宽度总是一样的,能否设置一下 POI 的列样式为自适应宽度?调用一下 Sheet.autoSizeColumn
即可
目前的列顺序似乎依赖于 getDeclaredFields
获得的数组,能否在 ExcelField
中添加一个 sort
属性指定顺序呢(只要做个排序即可)
Stream 排序如下
/**
* 根据元素的指定唯一标识过滤集合的 lambda 函数
*
* @param keyExtractor 元素标识生成函数
* @param <T> 集合元素的类型
* @param <K> 元素标识的类型
* @return {@link Predicate<T>} 类型的函数
*/
public static <T, K> Predicate<T> distinctByKey(Function<? super T, K> keyExtractor) {
final Map<K, Boolean> seen = new ConcurrentHashMap<>(16);
return object -> seen.putIfAbsent(keyExtractor.apply(object), Boolean.TRUE) == null;
}
像是导出时 Date 默认转换得到的 43559.4816651042
这种数据,在导入时就会出现错误,然而并不知道哪一行哪一列错了。。。
java.lang.IllegalArgumentException: Can not set java.util.Date field io.github.mrdear.excel.model.UserInfoVo.date to java.lang.String
如果希望别人使用最好添加开源协议,例如 MIT,不然在使用后总要担心你突然变成 GPL 之类的协议。而且,没有 License 真的显得很不专业哦
默认使用英文字段名导出,你是认真的?讲道理很多使用者并不一定懂英文,更懒得去学这些。所以,还是默认不包含字段比较好点吧?另外,Vo 里面常常包含了很多用不到的字段呢!例如子表的 List 什么的,这些导出恐怕有点困难吧
未完待续。。。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.