SpringBoot + Layui实现上传并读取excel中的数据

参考文章

SpringBoot+LayUI+poi 实现Excel文件上传下载

前言

需求:给有几个excel表格,分析整合其中的数据并存入一个记录表(数据库)中。

简单记录一下实现过程。并超级感谢参考文章的博主大大~~。

Ps:个人认为其中DataObject 或DataStore只是数据存储的一种格式而已,公司框架自定义好的。以后可以使用list或Map或其他的方式代替实现。

思路

1、点击【文件导入】按钮,选择一个excel文件
2、读取文件数据
3、存数据库
4、有多个excel文件,重复前三步

Maven依赖

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

前端代码

<div class="layui-row layui-col-md12">
    <div class="layui-col-md10 layui-form-col-item ">
        <label class="layui-form-label title" style="width: 6vw">记录添加</label>
        <div class="layui-input-block upload content1">
            <button class="layui-btn layui-btn-normal" data-type="import" id="importData">文件导入</button>                      
        </div>
    </div>
</div>
layui.use(['upload', 'element', 'layer','index'], function() {
    
    
    var $ = layui.jquery
        , upload = layui.upload
        , element = layui.element
        , layer = layui.layer;

    upload.render({
    
    
        elem: '#importData', //与按钮id对应
        accept: 'file',
        exts: 'pdf|zip|rar|7z|word|xlsx|xls|xlt|xltx|xltm|doc|docx',
        size:20480,
        auto: true,
        data:{
    
    },
        url: layui.sight.compileUrl('${rc.contextPath}/sysmanage/generateMisOrDisRecordTableByFile') //此处配置你自己的上传接口即可
        ,before: function(obj) {
    
    
            layer.msg('文件上传中...', {
    
    
                icon: 16,
                shade: 0.01,
                time: 0
            })
        }
        ,done: function(res){
    
    
            layer.close(layer.msg());//关闭上传提示窗口
            // if(res.code == 0){
    
    
            //     //上传成功后,根据文件数据插入数据表
            //     layer.msg("生成成功,请查看数据库内容是否正确!")
            //
            // }else{
    
    
            //     layer.msg("上传失败!请重试!")
            // }
        },error: function(){
    
    
            //layer.msg('网络异常,请稍后再试!', {icon: 2});
        }
    });
});

Controller层

/**
     * Description:从excel表格中读取数据生成行为临时表,以便插入正式库
     * date: 2022年03月1日
     *
     * @author tcy
     */
    @PostMapping("/generateMisOrDisRecordTableByFile")
    @ResponseBody
    public DataObject generateMisOrDisRecordTableByFile(@RequestPart(value = "file") MultipartFile file) throws AppException {
    
    
		return manageService.generateMisOrDisRecordTableByFile(file);
    }

Service层

/**
     * Description:从excel表格中读取数据生成行为临时表,以便插入正式库
     * date: 2022年03月1日
     *
     * @author tcy
     */
    @Override
    public DataObject generateMisOrDisRecordTableByFile(MultipartFile file) throws AppException {
    
    

        DataStore result = DataStore.getInstance();
        String datetime = "";

        try {
    
    
            InputStream inputStream = file.getInputStream();
            //System.out.println("============fileName=============="+file.getOriginalFilename());
			//读取excel表格内容---重点
            result = ExcelUtil.readExcel(inputStream, filename);
            inputStream.close();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }

        //对得到的数据进行分析、储存操作操作
        //省略
      
        return null;
    }

ExcelUtil工具类

public class ExcelUtil {
    
    

    /**
     * 处理上传的文件
     *
     * @param in
     * @param fileName
     * @return
     * @throws Exception
     */
    public static DataStore readExcel(InputStream in, String fileName) throws Exception {
    
    

        //创建Excel工作薄
        Workbook work = getWorkbook(in, fileName);
        if (null == work) {
    
    
            throw new Exception("创建Excel工作薄为空!");
        }
        Row row = null;
        //Cell cell = null;
        DataStore result = DataStore.getInstance();
        //将取出来的数据与关键字联系起来
        String[] mapkey = new String[]{
    
    "id","name","orgname","bdxwlb","bdxwnr"};

        //获取工作空间中的第一个工作簿
        Sheet sheet = work.getSheetAt(0);

        //获取表格中总列数
        row = sheet.getRow(0);
        //int colLength = row.getLastCellNum();

        // 获取第一个实际行的下标
        //System.out.println("======sheet.getFirstRowNum()========="+sheet.getFirstRowNum());
        // 获取最后一个实际行的下标
        //System.out.println("======sheet.getLastRowNum()========="+sheet.getLastRowNum());
        for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
    
    
            row = sheet.getRow(i);
            // 获取在某行第一个单元格的下标
            //System.out.println("======row.getFirstCellNum()========="+row.getFirstCellNum());
            // 获取在某行的列数
            //System.out.println("======row.getLastCellNum()========="+row.getLastCellNum());
            if (row == null || row.getFirstCellNum() == i) {
    
    
                continue;
            }
			//DataStore增加一行
            result.addRow();
            
            //循环列取数据存入DataStore中
            for (int j = row.getFirstCellNum() + 1; j < row.getLastCellNum(); j++) {
    
    
            	//统一取出数据格式为String
                row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
                //获取值
                String value = row.getCell(j).getStringCellValue();
                //存入数据
                result.put(result.rowCount() - 1,mapkey[j-1],value);
            }
        }

        work.close();//这行报错的话  看下导入jar包的版本
        return result;
    }

    /**
     * 判断文件格式
     *
     * @param inStr
     * @param fileName
     * @return
     * @throws Exception
     */
    public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
    
    
        Workbook workbook = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        //System.out.println("==========fileType========"+fileType);
        if (".xls".equals(fileType)) {
    
    
            workbook = new HSSFWorkbook(inStr);
        } else if (".xlsx".equals(fileType)) {
    
    
            workbook = new XSSFWorkbook(inStr);
        } else {
    
    
            throw new Exception("请上传excel文件!");
        }
        return workbook;
    }

}

猜你喜欢

转载自blog.csdn.net/qq_42622871/article/details/123228935