网站首页 > 技术文章 正文
背景
数据导入excel利用公式计算再读取出来
实体类
public class TestEntity {
private BigDecimal num1;
private BigDecimal num2;
private BigDecimal num3;
private BigDecimal num4;
}
模板excel
-- 第一行test4 =A2+B2+C2
-- 第二行test4 =A3*B3+C3
代码
@Override
public List<TestEntity> test() throws Exception {
List<TestEntity> list = new LinkedList<>();
TestEntity dto1 = new TestEntity();
dto1.setNum1(new BigDecimal("1"));
dto1.setNum2(new BigDecimal("2"));
dto1.setNum3(new BigDecimal("3"));
list.add(dto1);
TestEntity dto2 = new TestEntity();
dto2.setNum1(new BigDecimal("2"));
dto2.setNum2(new BigDecimal("3"));
dto2.setNum3(new BigDecimal("4"));
list.add(dto2);
List<String> properList = Arrays.asList("num1", "num2", "num3", "num4");
InputStream is = EduChapterServiceImpl.class.getClassLoader().getResourceAsStream("templates/" + "测试.xlsx");
XSSFWorkbook workbook;
try {
workbook = new XSSFWorkbook(is);
} catch (IOException e) {
throw null;
}
XSSFSheet sheet = workbook.getSheetAt(0);
int rowNum = 1;
int columnNum = 0;
for (int i = rowNum; i < list.size() + rowNum; i++) {
Row row = sheet.getRow(i);
for (int j = columnNum; j < properList.size() + columnNum; j++) {
String column = properList.get(j - columnNum);
Cell cell = row.getCell(j);
Field field = null;
BigDecimal num = null;
try {
field = list.get(i - rowNum).getClass().getDeclaredField(column);
ReflectionUtils.makeAccessible(field);
num = (BigDecimal) field.get(list.get(i - rowNum));
} catch (Exception e) {
e.printStackTrace();
}
if (!ObjectUtils.isEmpty(num)) {
cell.setCellValue(num.toString());
}
}
}
//数据清洗
workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
readExcel(list, sheet, rowNum, columnNum, properList, list.get(0).getClass());
return list;
}
/**
* 读取excel
*
* @param list
* @param sheet
* @param rowNum
* @param columnNum
* @param properList
* @param clazz
* @throws Exception
*/
public void readExcel(List<?> list, Sheet sheet, int rowNum, int columnNum, List<String> properList, Class<?> clazz) throws Exception {
for (int i = rowNum; i < list.size() + rowNum; i++) {
Row row = sheet.getRow(i);
for (int j = columnNum; j < properList.size() + columnNum; j++) {
Cell cell = row.getCell(j);
String column = properList.get(j - columnNum);
Field field = clazz.getDeclaredField(column);
ReflectionUtils.makeAccessible(field);
field.set(list.get(i - rowNum), new BigDecimal(getNumberValue(cell)));
}
}
}
/**
* 解析单元格
*
* @param cell
* @return
*/
public String getNumberValue(Cell cell) {
String cellValue = "";
if (cell == null) {
return cellValue;
}
switch (cell.getCellTypeEnum()) {
case NUMERIC:
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case STRING:
cellValue = String.valueOf(cell.getStringCellValue());
break;
case BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case FORMULA:
try {
cellValue = String.valueOf(cell.getNumericCellValue());
} catch (Exception e) {
cellValue = cell.getStringCellValue();
}
break;
case BLANK:
cellValue = "";
break;
case ERROR:
cellValue = "非法字符";
break;
default:
cellValue = "未知类型";
break;
}
return cellValue;
}
运行结果
- 上一篇: 办公自动化 VBA InStr函数用法 精准找到内容
- 下一篇: 一个 print 函数,挺会玩啊?
猜你喜欢
- 2024-12-31 发那科机器人2DV码垛功能
- 2024-12-31 如何使用python进行正确的四舍五入?这个坑有点大
- 2024-12-31 有没有通俗易懂的动态代理示例可供参考学习?
- 2024-12-31 运算符,i.MXRT,管理工具,嵌入式,XECC技术文章分享
- 2024-12-31 第十九天:EXCEL万能字符串转换函数TEXT那些普拉斯的神操作
- 2024-12-31 自动控制原理-滞后校正设计方法以及编程实现
- 2024-12-31 C语言 | 由小到大输出两个数
- 2024-12-31 C++笔记:函数
- 2024-12-31 十万个怎么办-不清楚机器人TEST指令怎么办?
- 2024-12-31 一个 print 函数,挺会玩啊?
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)