导入-常规Excel导入(横表头)

本文介绍了在Java开发中如何使用ApachePOI库处理Excel文件上传,包括依赖引入、数据解析和导入操作的详细步骤,适用于处理横表头文件的导入需求。
摘要由CSDN通过智能技术生成

业务场景

最近笔者在开发过程中,经常涉及到Excel导入,这边也对横表头文件导入做一个简单的归纳。

解决方案

1、相关依赖

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

2、方法构建

    @PostMapping(value = "/import", headers = "content-type=multipart/form-data")
    @ApiOperation(value = "导入")
    public ServiceResponse importExcel(MultipartFile file){

        List<PscEntity>list = new ArrayList<>();
        List<PscInfoEntity>pscInfoList = new ArrayList<>();
        Date date = new Date();
        try {
            //Excel数据解析
            Workbook workbook = WorkbookFactory.create(file.getInputStream());
            Sheet pscData = workbook.getSheet("ci_psc数据");
            for (int rowNum = 1; rowNum <= pscData.getLastRowNum(); rowNum++) {
                PscEntity entity = new PscEntity();
                Row row = pscData.getRow(rowNum);
                entity.setShipName(getStringValue(row.getCell(0)));
                //对应字段完善
                entity.setPscType(getStringValue(row.getCell(9)));
                list.add(entity);
            }

            Sheet pscInfoData = workbook.getSheet("ci_psc_info数据");
            for (int rowNum = 1; rowNum <= pscInfoData.getLastRowNum(); rowNum++) {
                PscInfoEntity entity = new PscInfoEntity();

                Row row = pscInfoData.getRow(rowNum);
                entity.setId(getStringValue(row.getCell(0)));
                //对应字段完善
                pscInfoList.add(entity);
            }


            // 关闭工作簿
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        pscService.importExcel(list,pscInfoList);
        return ServiceResponse.ok("导入成功");


    }

    private String getStringValue(Cell cell) {
        if (cell == null) {
            return "";
        }
        switch (cell.getCellType()) {
            case NUMERIC:
                return String.format("%.0f", cell.getNumericCellValue());
            case STRING:
            default:
                return cell.toString();
        }
    }

尾言

以上便是对常规Excel导入的操作,有需要的同学可以参考下。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hutool的ExcelUtil提供了非常方便的导入导出Excel的方法,可以处理复杂表头的情况。具体步骤如下: 1. 导入ExcelUtil类和相关依赖: ```java import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; ``` 2. 创建一个ExcelWriter对象,并指定输出路径: ```java ExcelWriter writer = ExcelUtil.getWriter("D:/test.xlsx"); ``` 3. 定义表头信息,使用链式语法设置表头: ```java writer.merge(0, 0, 0, 3, "学生信息表"); writer.merge(1, 1, 0, 1, "基本信息"); writer.merge(1, 1, 2, 3, "联系方式"); writer.writeRow(Arrays.asList("姓名", "年龄", "电话", "邮箱")); ``` 4. 写入数据: ```java List<Student> list = new ArrayList<>(); list.add(new Student("张三", 18, "12345678901", "zhangsan@qq.com")); list.add(new Student("李四", 20, "23456789012", "lisi@qq.com")); writer.write(list, true); ``` 5. 关闭ExcelWriter对象: ```java writer.close(); ``` 完整代码示例: ```java import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Test { public static void main(String[] args) { ExcelWriter writer = ExcelUtil.getWriter("D:/test.xlsx"); writer.merge(0, 0, 0, 3, "学生信息表"); writer.merge(1, 1, 0, 1, "基本信息"); writer.merge(1, 1, 2, 3, "联系方式"); writer.writeRow(Arrays.asList("姓名", "年龄", "电话", "邮箱")); List<Student> list = new ArrayList<>(); list.add(new Student("张三", 18, "12345678901", "zhangsan@qq.com")); list.add(new Student("李四", 20, "23456789012", "lisi@qq.com")); writer.write(list, true); writer.close(); } } class Student { private String name; private int age; private String phone; private String email; public Student(String name, int age, String phone, String email) { this.name = name; this.age = age; this.phone = phone; this.email = email; } // getter、setter方法省略 } ``` 以上代码中,我们通过ExcelWriter对象的merge方法来设置表头的合并单元格,使用writeRow方法写入表头数据,使用write方法写入实际数据,最后关闭ExcelWriter对象即可。 注意:代码中的Student类是自定义的,可以根据实际情况修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值