Java 后端将上传的 csv 文件转为 Excel xlsx 文件

2023-01-01 00:00:00 文件 后端 转为

一、概述

本地文件是 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-8
        CsvReader 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;
    }
    原文作者:云胡同学
    原文地址: https://blog.csdn.net/qq_32046111/article/details/124879455
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章