栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java生成excel文件,以及导出

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java生成excel文件,以及导出

需求:

1.公司需要实现导出Excel模板功能,以及传入该模板中的内容进行后台接收转换(业务代码均已删除,可能会出现业务代码报错情况删除既可,logger.info效果等同于systemm.out.println(“”))

注:1.该功能实现为ssm模式,出参直接为response。

       2.该功能导入excel数据解析仅支持xlsx格式,老版本格式不支持(能用但是有坑)

maven依赖为

	
			org.apache.poi
			poi
			3.12
		
1.生成excel模板前端下载

1.1前端代码为

 function toDown() {
        window.location.href = "${ctx}/excelReportManager/excelReport/download"
    }

1.2后端引入为(仅展示excel引包,没有输入输出流,仅供参考)

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;

1.3后端代码为

 
    @RequestMapping(value = "/download", produces = "text/html;charset=UTF-8")
    public void download(HttpServletResponse response, HttpServletRequest request) {
        //创建HSSFWorkbook对象
        try (HSSFWorkbook wb = new HSSFWorkbook()) {
            LOGGER.info("进入导出模板方法");
            //创建HSSFSheet对象
            HSSFSheet sheet = wb.createSheet("导出模板");
            //在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
            HSSFRow row1 = sheet.createRow(0);
            //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
            HSSFCell cell = row1.createCell(0);
            //合并单元格
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5));
            //向合并单元格中输入字段
            cell.setCellValue("客户支付流程跟踪导入和统计");
            //在sheet里创建第二行(下标为1)
            HSSFRow row2 = sheet.createRow(1);
            //创建单元格并设置单元格内容
            row2.createCell(0).setCellValue("渠道类型");
            row2.createCell(1).setCellValue("操作步骤");
            row2.createCell(2).setCellValue("操作总次数");
            row2.createCell(3).setCellValue("备用字段1");
            row2.createCell(4).setCellValue("备用字段2");
            row2.createCell(5).setCellValue("备用字段3");
            //输出Excel文件
            OutputStream output = response.getOutputStream();
            response.reset();
            //filename=后面跟文件名
            response.setHeader("Content-disposition", "attachment; filename=template.xlsx");
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            LOGGER.info("即将输出文件流");
            wb.write(output);
            output.flush();
            output.close();
        } catch (Exception e) {
            LOGGER.error("导出统计模板生成excel异常", e);
        } finally {
            RequestContextLocal.bindUserOperation("下载模板", "客户支付流程跟踪导入和统计菜单");
        }
        LOGGER.info("方法运行结束");
    }
实现结果

 

2.导入数据

1.1前端代码为

1.1.1html部分

 导入数据
                                        
                                    

1.1.2js部分 

function sc() {
        var file = document.getElementById("file1").value
        if (file == '') {
            alert("请选择excel,再导入");
        } else if (file.lastIndexOf(".xlsx") < 0 ||file.lastIndexOf(".xls") < 0) {
            alert("只能导入Excel文件");
        } else {
     
            var formData = new FormData();
                   formData.append("file",$("#file1")[0].files[0]);
                   $.ajax({
                       url:'${ctx}/excelReportManager/excelReport/upload',
                       type:'POST',
                       async:false,
                       dataType:'json',
                       data:formData ,
                         // 告诉jQuery不要去处理发送的数据
                               processData : false,
                               // 告诉jQuery不要去设置Content-Type请求头
                               contentType : false,
                               beforeSend:function(){
                                   console.log("正在进行,请稍候");
                               },
                                success : function(responseStr) {
                               }

                   })


                   }
    }

1.2后端代码为(引包为导入的引包)

 
    @RequestMapping("upload")
    @ResponseBody
    public void upload(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException {
        JSONObject json = new JSONObject();
        //获取输入流
        InputStream is = file.getInputStream();
        LOGGER.info("获取输入流成功即将转换为excel");
        Workbook workbook = new HSSFWorkbook(is);
        //获取第一张工作表
        Sheet sheet = workbook.getSheetAt(0);
        //从第二行开始获取 getLastRowNum
        LOGGER.info("获取到的页面总行数为{}", sheet.getLastRowNum());
        //循环每一行(因前两行为固定代码,所以从第三行开始(从下标0开始第三个为2))
        for (int i = 2; i < sheet.getLastRowNum(); i++) {
            Row sheetRow = sheet.getRow(i);
            SpPayProcessTrackingBankRecord spPayProcessTrackingBankRecord = new SpPayProcessTrackingBankRecord();
            //循环获取每一列
            try {
                //获取i行第一列   Cell.CELL_TYPE_STRING为poi提供的枚举,该字段的类型  以下两行代码需组合调用
                sheetRow.getCell(0).setCellType(Cell.CELL_TYPE_STRING);
                String appTp = sheetRow.getCell(0).getStringCellValue();
                //获取i行第二列
                sheetRow.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
                String name = (sheetRow.getCell(1).getStringCellValue());
                //获取i行第三列
                sheetRow.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
                String id = (sheetRow.getCell(2).getStringCellValue());

            } catch (NullPointerException e) {
                LOGGER.error((i - 1) + "行数据不合法,请重新导入,异常信息为", e);
                //如果单元格为空会爆出空指针
                json.put("hint", (i - 1) + "行数据不合法,请重新导入");
                response.getWriter().print(json.toString());

            }
        }

        workbook.close();
        //导出成功转为list后的增加操作
        LOGGER.info("执行添加操作成功,条数为{}", count);
        //进行下一步操作
        json.put("hint", "共有" + count + "条数据导入成功");
        response.getWriter().print(json.toString());


    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/825323.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号