学习笔记1-业务逻辑之excel转csv

场景:上传一个excel文件,把其转化成csv

  1. 首先创建一个ExcelUtils的工具类,里面写上函数

public static String excelToCsv(MultipartFile multipartFile){
}

MultipartFile 是 Spring Framework 提供的一个接口,用于处理 web 应用程序中通过 HTTP 请求以
multipart/form-data 格式上传的文件。当用户在网页表单中选择一个或多个文件,并点击提交按钮时,浏览器会按照
multipart/form-data 规范打包这些文件及其相关信息,形成一个多部分(multipart)的 HTTP 请求发送到服务器。

使用EasyExcel(这个一个开源工具)读

 list = EasyExcel.read(multipartFile.getInputStream())
               .excelType(ExcelTypeEnum.XLSX) //指定了所读取文件的类型为.xlsx
               .sheet() //操作当前工作表(Sheet)。在不指定具体工作表索引或名称的情况下,默认处理第一个工作表
               .headRowNumber(0)//意味着数据的第一行被当作表头(包含列名)。如果数据从第二行开始,则应设置为1
               .doReadSync();//此方法会阻塞直到所有数据从Excel文件中读取完毕,并将解析后的数据以某种数据结构(通常是List)返回。结果存储在变量list中
  1. 开始转化
StringBuilder builder = new StringBuilder();
//读取表头
LinkedHashMap<Integer, String> headerMap = (LinkedHashMap)list.get(0);
//过滤不为null的,放到headerList中
List<String> headerList = headerMap.values().stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
builder.append(StringUtils.join(headerList,",")).append("\n");
        //读取数据
        for (int i = 1; i < list.size(); i++) {
            LinkedHashMap<Integer, String> dataMap = (LinkedHashMap) list.get(i);
            //同样的过滤
            List<String> dataList = dataMap.values().stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
            builder.append(StringUtils.join(dataList,",")).append("\n");
        }
  1. 完成工具类
@Slf4j
public class ExcelUtils {

    public static String excelToCsv(MultipartFile multipartFile) throws FileNotFoundException {
       // File file = ResourceUtils.getFile("classpath:test_excel.xlsx");
        List<Map<Integer, String>> list = null;
        try {
            list = EasyExcel.read(multipartFile.getInputStream())
                    .excelType(ExcelTypeEnum.XLSX)
                    .sheet()
                    .headRowNumber(0)
                    .doReadSync();
        } catch (IOException e) {
            log.error("csv转换错误",e);
        }
        System.out.println(list);

        //转化为csv
        StringBuilder builder = new StringBuilder();
        //读取表头
        LinkedHashMap<Integer, String> headerMap = (LinkedHashMap)list.get(0);
        List<String> headerList = headerMap.values().stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
        builder.append(StringUtils.join(headerList,",")).append("\n");
        //读取数据
        for (int i = 1; i < list.size(); i++) {
            LinkedHashMap<Integer, String> dataMap = (LinkedHashMap) list.get(i);
            List<String> dataList = dataMap.values().stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
            builder.append(StringUtils.join(dataList,",")).append("\n");
        }
        return builder.toString();
    }
    
}

CSV,全称为 Comma-Separated Values(逗号分隔值),是一种通用的、简单的文件格式,用于存储和交换表格数据。它是一种纯文本文件,其主要特点如下:

纯文本格式:CSV 文件是以文本形式存在的,这意味着它们可以直接用文本编辑器(如记事本、TextEdit等)打开和查看。它们不包含任何二进制编码或特殊格式标记,仅包含可打印字符。

数据组织:CSV 文件中的数据以行和列的形式组织,类似于电子表格或数据库表格。每一行代表一个数据记录,而每行内部的各个数据项(字段)则由特定的分隔符(通常是逗号)分隔开来。例如:

Name,Age,City
Alice,30,New York
Bob,25,Los Angeles
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值