一、概述

本地文件是 csv格式,要先将其转成 xlsx

二、实现步骤

2.1 获取 csv 文件数据

由于前端的上传文件的数据类型是 MultipartFile,所以就通过获取输入流的方式读取到 csv 数据。
将所有 csv数据一行一行的放入到 ArrayList 动态数组中。

  1. /**
  2. * 获取 csv 数据
  3. * @author 云胡
  4. * @param multipartFile
  5. * @throws IOException
  6. */
  7. public ArrayList<String[]> getCsvDataList(MultipartFile multipartFile) throws IOException{
  8. // 存放所有的 csv 文件数据
  9. ArrayList<String[]> csvDataList = new ArrayList<>();
  10. // 文件的编码,这里设为 utf-8
  11. CsvReader reader = new CsvReader(multipartFile.getInputStream(), ',', Charset.forName("utf-8"));
  12. // 获取数据
  13. while (reader.readRecord()) {
  14. csvDataList.add(reader.getValues());
  15. }
  16. // 关闭
  17. reader.close();
  18. return csvDataList;
  19. }

2.2 生成 Excel 文件

  1. /**
  2. * 生成 Excel 文件
  3. * @param multipartFile
  4. * @return 生成的 Excel 文件名
  5. * @throws IOException
  6. */
  7. public String csvToExcelFile(MultipartFile multipartFile) throws IOException {
  8. // 获取 csv 数据
  9. ArrayList<String[]> csvDataList = getCsvDataList(multipartFile);
  10. if(csvDataList.isEmpty())
  11. {
  12. // 没有数据
  13. return "";
  14. }
  15. // 获取拥有后缀的文件名 「abc.csv」
  16. String csvFileNameHaveSuffix = multipartFile.getOriginalFilename();
  17. // 获取不带后缀的文件名 「abc」
  18. String csvFileName = csvFileNameHaveSuffix.substring(0, csvFileNameHaveSuffix.indexOf("."));
  19. // 创建一个 xlsx 工作簿
  20. XSSFWorkbook workbook = new XSSFWorkbook();
  21. String outputExcelFileName = csvFileName + ".xlsx";
  22. FileOutputStream out = new FileOutputStream(new File(outputExcelFileName));
  23. // 创建工作表
  24. XSSFSheet spreadsheet = workbook.createSheet("Sheet1");
  25. // 将 csv 数据存到 xlsx 文件中
  26. for (int rowNum = 0; rowNum < csvDataList.size(); rowNum++) {
  27. // 获取一行的数据
  28. String[] csvFileRowData = csvDataList.get(rowNum);
  29. XSSFRow row = spreadsheet.createRow(rowNum);
  30. for (int columnNum = 0; columnNum < csvFileRowData.length; columnNum++) {
  31. XSSFCell cell = row.createCell(columnNum);
  32. cell.setCellValue(csvFileRowData[columnNum]);
  33. }
  34. }
  35. workbook.write(out);
  36. out.close();
  37. return outputExcelFileName;
  38. }

有了 xlsx 的文件名,EasyExcel 就可以读取了。