我的编程笔记
  • 云胡的编程笔记
  • 后端
    • Spring Boot 配置 MySQL 数据库
    • MyBatis-Plus 实现增删改查操作
    • Java 后端将上传的 csv 文件转为 Excel xlsx 文件
  • JavaScript
    • JavaScript 三种循环方法
    • JavaScript 箭头函数
    • JavaScript 高阶函数
    • JavaScript 变量作用域
    • JavaScript 操作 DOM
  • Vue3
    • Vue3 搭配 Element-Plus
    • Vue3 实现路由跳转
    • Vue3 上传 Excel 文件
  • Cpp
    • C++ Vector 易错点
  • Qt
    • Qt 实时显示鼠标位置
  • Python
  • 编辑器
    • Visual Studio Code 使用
  • 其他
    • 网站和软件推荐
  • 数据结构与算法
由 GitBook 提供支持
在本页
  • 一、概述
  • 二、实现步骤
在GitHub上编辑
  1. 后端

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

一、概述

本地文件是 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 文件
     * @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;
    }
上一页MyBatis-Plus 实现增删改查操作下一页JavaScript

最后更新于3年前