简单易用可扩展的Excel读写工具类 支持 java 1.8
mvn clean install
<dependencies>
<dependency>
<groupId>com.github.fnwib</groupId>
<artifactId>fn-xlsx</artifactId>
<version>1.3.13</version>
</dependency>
</dependencies>
TextOne | integer | LocalDte 1 | LocalDte 2 | Map A | Map B |
---|---|---|---|---|---|
text1 | 1 | 2018-02-07 | 2018/1/07 | m11 | m21 |
text2 | 2 | 2018-02-08 | 2018/1/08 | m12 | m22 |
text3 | 3 | 2018-02-09 | 2018/1/09 | m13 | m23 |
@ToString //lombok
@Getter //lombok
@Setter //lombok
public class AutoMappingModel {
@AutoMapping("Text One")
private String text1;
@AutoMapping("integer")
private Integer intNum;
@AutoMapping(prefix = "LocalDate", value = "\\d+")
private List<LocalDate> localDateList;
@AutoMapping(prefix = "Map", value = "[A-Z]")
private Map<Integer, String> stringKeyMap;
}
File file = new File("file");
Workbook workbook = new XSSFWorkbook(file);
数据量比较大推荐使用 excel-streaming-reader
- 简单使用
RowMapper<AutoMappingModel> parser = new RowMapperImpl<>(AutoMappingModel.class);
Workbook workbook = null;
boolean matched = false;
for (Sheet sheet : workbook) {
for (Row row : sheet) {
if (matched) {
Optional<AutoMappingModel> convert = parser.convert(row);
if (convert.isPresent()) {
AutoMappingModel autoMappingModel = convert.get();
System.out.println(autoMappingModel);
}
} else {
boolean match = parser.match(row);
if (match) {
matched = true;
}
}
}
}
- 使用ExcelReader读取
RowMapper<AutoMappingModel> parser = new RowMapperImpl<>(AutoMappingModel.class);
ExcelReader<AutoMappingModel> reader = new ExcelReaderImpl<>(parser, workbook, 0);
while (reader.hasNext()){
List<AutoMappingModel> models = reader.fetchData(500);
System.out.println(models.size());
}
com.github.fnwib.plugin.ValueHandler trim = (s) -> s.trim();
LocalConfig localConfig = new LocalConfig();
localConfig.registerTitleValueHandlers(trim); // 注册表头字符串处理器
LineReader<AutoMappingModel> parser = new LineReaderForExcel<>(AutoMappingModel.class, localConfig);
com.github.fnwib.plugin.ValueHandler trim = (s) -> s.trim();
LocalConfig localConfig = new LocalConfig();
localConfig.registerReadContentValueHandlers(trim);
LineReader<AutoMappingModel> parser = new LineReaderForExcel<>(AutoMappingModel.class, localConfig);
public class ToUpperHandler implements ValueHandler {
@Override
public String convert(String param) {
return param.toUpperCase();
}
}
@ToString //lombok
@Getter //lombok
@Setter //lombok
public class AutoMappingModel {
@ReadValueHandler({ToUpperHandler.class})
@AutoMapping("Text One")
private String text1;
@AutoMapping("integer")
private Integer intNum;
@AutoMapping(prefix = "LocalDate", value = "\\d+")
private List<LocalDate> localDateList;
@AutoMapping(prefix = "Map", value = "[A-Z]")
private Map<Integer, String> stringKeyMap;
}
com.github.fnwib.write.ExcelWriterImplTest
com.github.fnwib.write.ExcelWriterByMapTest