SSM实现Excel表的导入导出

POI:

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

HSSF

HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。


点击这里查询HSSF的中文API
pom.xml

 <!--处理excel-->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.17</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
    </dependency>

文件解析器

<!--定义文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--默认编码-->
        <property name="defaultEncoding" value="UTF-8"/>
        <!--最大上传容量100MB,10*1024*1024-->
        <property name="maxUploadSize" value="104857600"/>
        <!--缓存-->
        <property name="maxInMemorySize" value="4096"/>
    </bean>

JSP页面

<form action="/upload/importExcel" method="post" enctype="multipart/form-data">
    <input type="file" name="excelFile"/></br>
    <input type="submit" value="excel文件上传"/>
</form>
</br>
</br>
<form id="downExcelFile" action="/upload/exportExcel" method="post" enctype="multipart/form-data">
    <input type="submit" value="excel文件下载"/>
</form>

Excel上传

上传的Excel
在这里插入图片描述
Controller

/**
     * 导入指定格式的Excel
     * @param excelFile
     * @return
     */
    @PostMapping("/importExcel")
    @ResponseBody
    public String importExcel(@RequestParam("excelFile") MultipartFile excelFile){
        if(excelFile!=null){
            if(!excelFile.getOriginalFilename().matches("^.+\\.(?i)((xls)|(xlsx))$")){
                return "请上传后缀名为xls或xlsx的Excel文件!";
            }
            try {
                if(fileUploadService.importExcel(excelFile)==1){
                    return "excel上传成功!";
                }else {
                    return "excel上传失败";
                }

            }catch (InvalidFormatException |IOException e){
                e.printStackTrace();
                return "excel上传失败";
            }
        }
        return "excel上传失败";
    }

ServiceImpl

 @Override
    public int importExcel(MultipartFile excelFile) throws IOException, InvalidFormatException {
        List<student> studentList=new ArrayList<student>();
        InputStream excelStream=excelFile.getInputStream();
        //获取工作簿
        Workbook workbook= WorkbookFactory.create(excelStream);
        logger.info("****sheetName:"+workbook.getSheetName(0));
        //获取工作表
        Sheet sheet=workbook.getSheetAt(0);
        //获取Excel总行
        int rowNum=sheet.getLastRowNum();
        logger.info("****rowNum:"+rowNum);
        //从内容开始
        if(rowNum>2){
            for (int i=2;i<rowNum;i++){
                Row row=sheet.getRow(i);
                student student=new student();

                student.setId((int) row.getCell(0).getNumericCellValue());
                student.setName(row.getCell(1).getStringCellValue());
                student.setAge((int) row.getCell(2).getNumericCellValue());
                student.setSex(row.getCell(3).getStringCellValue());
                student.setBanji((int)row.getCell(4).getNumericCellValue());
                student.setMajor(row.getCell(5).getStringCellValue());
                student.setTime(row.getCell(6).getDateCellValue());

                studentList.add(student);
//                fileUploadDao.exportStudent()
            }
        }
        logger.info("****studentList:"+studentList);
        int i = fileUploadDao.importExcel(studentList);
        logger.info("***returnNum:"+i);
        if(i==rowNum-2){
            return 1;
        }
        return 0;
    }

mapper

<insert id="importExcel" parameterType="java.util.List">
        insert into student(id,name,age,sex,banji,major,time) values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.id,jdbcType=INTEGER},
            #{item.name,jdbcType=VARCHAR},
            #{item.age,jdbcType=INTEGER},
            #{item.sex,jdbcType=VARCHAR},
            #{item.banji,jdbcType=INTEGER},
            #{item.major,jdbcType=VARCHAR},
            #{item.time,jdbcType=DATE}
            )
        </foreach>
    </insert>

导出Excel

Controller

/**
     * 导出Excel
     * @return
     */
    @PostMapping("/exportExcel")
    @ResponseBody
    public void exportExcel(HttpServletResponse response) throws IOException {

        //获取导出的学生
        List<student> allStudent = fileUploadService.findAllStudent();
        //把下载文件的日期添加到文件名上
        SimpleDateFormat date=new SimpleDateFormat("yyyy-MM-dd HH:mmss");
        String excelName=date+"学生信息.xls";
        logger.info(excelName);
        //响应 导出Excel
        response.setHeader("Content-Disposition","attachment;filename="+excelName);
        response.setContentType("application/x-excel;charset=UTF-8");
        OutputStream excelOutStream=response.getOutputStream();
        if(allStudent!=null){
            fileUploadService.exportExcel(allStudent,excelOutStream);
        }
        excelOutStream.close();
//        return "";
    }

ServiceImpl

@Override
    public void exportExcel(List<student> studentList, OutputStream excelOutStream)throws IOException {
        HSSFWorkbook workbook=new HSSFWorkbook();
        //合并单元格
        CellRangeAddress cellRangeAddress=new CellRangeAddress(0,0,0,6);
        //创建表
        HSSFSheet sheet=workbook.createSheet("学生信息");
        HSSFRow nameRow=sheet.createRow(0);
        nameRow.createCell(0).setCellValue("学生信息表");
        //第一行设置为标题
        sheet.addMergedRegion(cellRangeAddress);
        //第二行设置字段名
        HSSFRow titleRow=sheet.createRow(1);
        String[] fieldName={"学号","姓名","年龄","性别","班级","专业","日期"};
        for(int i=0;i<fieldName.length;i++){
            titleRow.createCell(i).setCellValue(fieldName[i]);
        }
        int studentNum=studentList.size();
        for(int i=0;i<studentNum;i++){
            student everStudent=studentList.get(i);
            HSSFRow row=sheet.createRow(i+2);
            row.createCell(0).setCellValue(everStudent.getId());
            row.createCell(1).setCellValue(everStudent.getName());
            row.createCell(2).setCellValue(everStudent.getAge());
            row.createCell(3).setCellValue(everStudent.getSex());
            row.createCell(4).setCellValue(everStudent.getBanji());
            row.createCell(5).setCellValue(everStudent.getMajor());
            row.createCell(6).setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(everStudent.getTime()));
        }
        //响应给前台
        workbook.write(excelOutStream);
    }

    @Override
    public List<student> findAllStudent() {
        List<student> allStudent=fileUploadDao.findAllStudent();
        return allStudent;
    }

导出的Excel
在这里插入图片描述

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
SSM(Spring + SpringMVC + MyBatis)框架可以很方便地实现Excel文件的导入导出。下面是一个简单的实现流程: 1. 导出Excel文件 - 添加POI依赖,例如: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> ``` - 创建一个Excel文件,例如: ``` Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello, world!"); ``` - 将Excel文件写入输出流,例如: ``` response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=test.xls"); OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); ``` 2. 导入Excel文件 - 添加POI依赖,例如: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> ``` - 读取Excel文件,例如: ``` InputStream inputStream = new FileInputStream("test.xls"); Workbook workbook = new HSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); Row row = sheet.getRow(0); Cell cell = row.getCell(0); System.out.println(cell.getStringCellValue()); ``` - 将Excel数据保存到数据库,例如: ``` @Autowired private UserService userService; for (int i = 1; i <= sheet.getLastRowNum(); i++) { row = sheet.getRow(i); User user = new User(); user.setName(row.getCell(0).getStringCellValue()); user.setAge((int) row.getCell(1).getNumericCellValue()); userService.saveUser(user); } ``` 以上是一个简单的实现流程,具体实现方式可以根据实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值