仅供参考,用于学习
使用场景
idea中使用jeecg springboot框架开发时需要将Excel表中的数据导入到数据库里面
Excel的模板
该模板只是简单的例子,用来理解。与实现的字段无关。
在咱们正式开发的时候,根据客户的需求经常会碰到这样的情况,不像之前的那样每一列的数据都是相同的字段,现在的咱们的模板是每一个字段对应的数据都是不一样的。
实现的基本思想
该思想主要分为三个步骤:
1、将需要导入的Excel表上传到服务器上面
2、使用POI自带的工具对Excel表进行处理,获取到sheet以及行数每个cell,然后对相对应的数据库中的字段进行一一的赋值,然后在调用封装好的save进行插入到数据中的功能。
3、临时生成的Excel文件删除
实现
jeecg 框架中的代码生成器可以生成基本的一些功能,前端直接用的是自动生成代码,咱们只需要修改一些接口就可以了。
下面就是对应的importExcel方面的实现完整代码
/**
* 通过excel导入数据
*
* @param
* @param
* @return
*/
```@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel (HttpServletRequest request, @RequestParam("file") MultipartFile file) throws
IOException { //需要做一些简单修改@RequestParam("file") MultipartFile file
// 上传阶段 里面的path1的文件路径可以自行选择
// 文件名
String fileName = "";
// 创建文件的临时路径
String path1 = "";
// 将request变成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 获取multiRequest中所有的文件名
Iterator iter = multiRequest.getFileNames();
while (iter.hasNext()) {
// 一次遍历所有文件
MultipartFile file1 = multiRequest.getFile(iter.next().toString());
if (file != null) {
// 获取上传文件名
fileName = file1.getOriginalFilename();
// 获取后缀名
String sname = fileName.substring(fileName.lastIndexOf("."));
// 时间格式化
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
// 获取当前时间并作为时间戳
String timeStamp = simpleDateFormat.format(new Date());
// 拼接新的文件名
String newName = "利润表" + timeStamp + sname;
// 指定上传文件的路径
path1 = "D:\\" + newName;
// 上传保存
file.transferTo(new File(path1));
// 保存当前文件路径
request.getSession().setAttribute("filePath", path1);
}
}
// 导入阶段
Workbook workbook = null;
// 获取文件路径
String path = (String) request.getSession().getAttribute("filePath");
// 获取文件格式
String fileType = path.substring(path.lastIndexOf(".") + 1, path.length());
InputStream stream = new FileInputStream(path);
// 如果后缀名为xls,使用HSSF
if (fileType.equals("xls")) {
workbook = new HSSFWorkbook(stream);
// 如果后缀名为xlsx,使用XSSF
} else if (fileType.equals("xlsx")) {
workbook = new XSSFWorkbook(stream);
}
//sheet1是Excel表左下面的页码名称,需要固定
Sheet sheet = workbook.getSheet("sheet1");
//该例子只有一个例子,其他的字段的选择都是一样的
FinanceProfit financeProfit = new FinanceProfit();
// 本期营业收入
sheet.getRow(1).getCell(1).setCellType(Cell.CELL_TYPE_STRING);
String operatingIncome = sheet.getRow(1).getCell(1).getStringCellValue();
//由于Excel文件里面的数据有的时候很多可能会出现不需要填写,从而插入到数据里面的时候默认的是0.
if (operatingIncome != "") {
financeProfit.setOperatingIncome(Double.parseDouble(operatingIncome));
} else {
financeProfit.setOperatingIncome(0.0);
}
//直接调用封装好的save方面就可以了
boolean flag = financeProfitService.save(financeProfit);
// 删除创建在D盘上面的临时文件
File file1 = new File(path1);
if (file1.exists()) {
if (file1.isFile()) {
file1.delete();
}
}
if (flag) {
return Result.ok("导入成功!");
} else {
return Result.error("导入失败");
}