一、概述
本地文件是csv
格式,将其转成xlsx
或者xls
。
二、实现步骤
2.1 获取 csv 文件数据
由于前端的上传文件的数据类型是MultipartFile
,所以就通过获取输入流的方式读取到CsvReader
对象中。
然后将所有csv
数据一行一行的存入到ArrayList
动态数组中。
/*** 获取 csv 数据* @author 云胡* @param multipartFile* @throws IOException*/public ArrayList<String[]> getCsvDataList(MultipartFile multipartFile) throws IOException{// 存放所有的 csv 文件数据ArrayList<String[]> csvDataList = new ArrayList<>();// 文件的编码,这里设为 utf-8CsvReader reader = new CsvReader(multipartFile.getInputStream(), ',', Charset.forName("utf-8"));// 获取数据while (reader.readRecord()) {csvDataList.add(reader.getValues());}// 关闭reader.close();return csvDataList;}
2.2 生成 Excel xlsx 文件
/*** 生成 Excel 文件* @author 云胡* @param multipartFile* @return 生成的 Excel 文件名* @throws IOException*/public String csvToExcelFile(MultipartFile multipartFile) throws IOException {// 获取 csv 数据ArrayList<String[]> csvDataList = getCsvDataList(multipartFile);if(csvDataList.isEmpty()){// 没有数据return "";}// 获取拥有后缀的文件名 「abc.csv」String csvFileNameHaveSuffix = multipartFile.getOriginalFilename();// 获取不带后缀的文件名 「abc」String csvFileName = csvFileNameHaveSuffix.substring(0, csvFileNameHaveSuffix.indexOf("."));// 创建一个 xlsx 工作簿XSSFWorkbook workbook = new XSSFWorkbook();String outputExcelFileName = csvFileName + ".xlsx";FileOutputStream out = new FileOutputStream(new File(outputExcelFileName));// 创建工作表XSSFSheet spreadsheet = workbook.createSheet("Sheet1");// 将 csv 数据存到 xlsx 文件中for (int rowNum = 0; rowNum < csvDataList.size(); rowNum++) {// 获取一行的数据String[] csvFileRowData = csvDataList.get(rowNum);XSSFRow row = spreadsheet.createRow(rowNum);for (int columnNum = 0; columnNum < csvFileRowData.length; columnNum++) {XSSFCell cell = row.createCell(columnNum);cell.setCellValue(csvFileRowData[columnNum]);}}workbook.write(out);out.close();return outputExcelFileName;}