首页 > 数据库 >读取Excel插入数据库POI

读取Excel插入数据库POI

时间:2023-01-12 14:04:16浏览次数:80  
标签:读取 POI Excel System getStringCellValue getCell println ptsPlateformProduct row

前言

经常遇到给张Excel表,要求数据导入数据库,Navicat for MySQL可以做这个事,手闲写个POI调用通用Mapper插入,之前文章有反向操作,将数据写入Excel,Excel格式报表生成(POI技术)同步下载问题解决
读取Excel插入数据库POI_Excel转数据库

准备 pom

POI依赖,框架用SpringBoot

      <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.11</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.11</version>
        </dependency>
导入

可以使用单元测试导包,

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.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
    @Autowired
    private PtsService ptsService;

    @Test
    public void contextLoads() {
        ptsService.hah();

    }

    @Test
    public void heihei() {
        File file = new File("C:/Users/19686/Desktop/产品信息表.xlsx");

        try {
            InputStream fis = new FileInputStream(file);
            //读取导入的Excel文件内容
            XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fis);
            //获取第一个sheet工作薄
            Sheet sheet = xssfWorkbook.getSheetAt(0);

            //读取出来的数据放到ListMap中
            //List<Map<String, Object>> mapList =new ArrayList<Map<String,Object>>();
            List<PtsPlateformProduct> ptsPlateformProducts = new ArrayList<PtsPlateformProduct>();
            //获取sheet的最大row下标,实际获取的行数-1
            int lastRowNum = sheet.getLastRowNum();

            if (lastRowNum > 0) {
                for (Row row : sheet) {
                    //跳过表头
                    if (row.getRowNum() < 3) {
                        continue;
                    }
                    //判断导入的excel文件中的是否存在空
                    boolean flag = isExistNull(row);
                    if (flag) {

                        PtsPlateformProduct ptsPlateformProduct = new PtsPlateformProduct();

                        ptsPlateformProduct.setId(UUID.randomUUID().toString().substring(0, 32));
                        //  System.out.println("第"+ (row.getRowNum()+1) + "行,第1个单元格值为:" +row.getCell(0).getStringCellValue());
                        ptsPlateformProduct.setPtsProductCode(row.getCell(1).getStringCellValue());
                        //  System.out.println("第"+ (row.getRowNum()+1) + "行,第2个单元格值为:" +row.getCell(1).getStringCellValue());
                        ptsPlateformProduct.setPtsProductName(row.getCell(2).getStringCellValue());
                        //   System.out.println("第"+ (row.getRowNum()+1) + "行,第3个单元格值为:" +row.getCell(2).getStringCellValue());
                        ptsPlateformProduct.setPtsTradeName(row.getCell(3).getStringCellValue());
                        //   System.out.println("第"+ (row.getRowNum()+1) + "行,第4个单元格值为:" +row.getCell(3).getStringCellValue());
                        ptsPlateformProduct.setPtsProductSpec(row.getCell(4).getStringCellValue());
                        //  System.out.println("第"+ (row.getRowNum()+1) + "行,第5个单元格值为:" +row.getCell(4).getStringCellValue());
                        ptsPlateformProduct.setPtsUnitSpec(row.getCell(5).getStringCellValue());
                        //   System.out.println("第"+ (row.getRowNum()+1) + "行,第6个单元格值为:" +row.getCell(5).getStringCellValue());
                        ptsPlateformProduct.setPtsDoseageForm(row.getCell(6).getStringCellValue());
                        //  System.out.println("第"+ (row.getRowNum()+1) + "行,第7个单元格值为:" +row.getCell(6).getStringCellValue());
                        ptsPlateformProduct.setPtsDrugPacking(row.getCell(7).getStringCellValue());
                        //   System.out.println("第"+ (row.getRowNum()+1) + "行,第8个单元格值为:" +row.getCell(7).getStringCellValue());
                        ptsPlateformProduct.setPtsMetricName("");
                        // System.out.println("第"+ (row.getRowNum()+1) + "行,第9个单元格值为:" +row.getCell(8).getStringCellValue());
                        ptsPlateformProduct.setPtsManufactureName(row.getCell(9).getStringCellValue());
                        //  System.out.println("第"+ (row.getRowNum()+1) + "行,第10个单元格值为:" +row.getCell(9).getStringCellValue());
                        ptsPlateformProduct.setMspPlateformCode(row.getCell(10).getStringCellValue());
                        //  System.out.println("第"+ (row.getRowNum()+1) + "行,第11个单元格值为:" +row.getCell(10).getStringCellValue());
                        ptsPlateformProduct.setVersion(null);
                        // System.out.println("第"+ (row.getRowNum()+1) + "行,第12个单元格值为:" +row.getCell(11).getStringCellValue());
                        ptsPlateformProduct.setDeleted(null);
                        // System.out.println("第"+ (row.getRowNum()+1) + "行,第13个单元格值为:" +row.getCell(12).getStringCellValue());
                        ptsPlateformProduct.setCreateTime(new Date());
                        // System.out.println("第"+ (row.getRowNum()+1) + "行,第14个单元格值为:" +row.getCell(13).getStringCellValue());
                        ptsPlateformProduct.setCreateUserId("");
                        //System.out.println("第"+ (row.getRowNum()+1) + "行,第15个单元格值为:" +row.getCell(14).getStringCellValue());
                        ptsPlateformProduct.setUpdateTime(new Date());
                        //System.out.println("第"+ (row.getRowNum()+1) + "行,第16个单元格值为:" +row.getCell(15).getStringCellValue());
                        ptsPlateformProduct.setUpdateUserId("");
                        // System.out.println("第"+ (row.getRowNum()+1) + "行,第17个单元格值为:" +row.getCell(16).getStringCellValue());
                        ptsPlateformProducts.add(ptsPlateformProduct);
                    } else {
                        //获取当前行数
                        int currentNum = row.getRowNum() + 1;
//						return  "第" + currentNum + "行数据出错,不能为空!"
                        System.out.println("第" + currentNum + "行数据出错,不能为空!");
                    }
                }
				//调用通用mapper
                ptsService.insert(ptsPlateformProducts);
            } else {
                System.out.println("您导入的excel文件为空,请重新导入!");
//				return "您导入的excel文件为空,请重新导入!";
            }

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    //判断导入的excel文件中row行的每个cell时候是否存在空
    public static boolean isExistNull(Row row) {
        Cell cell0 = row.getCell(0);
        if (cell0 == null) {
            return false;
        } else {
            cell0.setCellType(Cell.CELL_TYPE_STRING);
            //可以自定义一个符合规则的StringUtils工具类,这个主要用来判断单元格内容
            if (StringUtils.isBlank(cell0.getStringCellValue())) {
                return false;
            }
        }
        Cell cell1 = row.getCell(1);
        if (cell1 == null) {
            return false;
        } else {
            cell1.setCellType(Cell.CELL_TYPE_STRING);
            if (StringUtils.isBlank(cell1.getStringCellValue())) {
                return false;
            }
        }

        Cell cell2 = row.getCell(2);
        if (cell2 == null) {
            return false;
        } else {
            cell2.setCellType(Cell.CELL_TYPE_STRING);
            if (StringUtils.isBlank(cell2.getStringCellValue())) {
                return false;
            }
        }

        Cell cell3 = row.getCell(3);
        if (cell3 == null) {
            return false;
        } else {
            cell3.setCellType(Cell.CELL_TYPE_STRING);
            if (StringUtils.isBlank(cell3.getStringCellValue())) {
                return false;
            }
        }

        Cell cell4 = row.getCell(4);
        if (cell4 == null) {
            return false;
        } else {
            cell4.setCellType(Cell.CELL_TYPE_STRING);
            if (StringUtils.isBlank(cell4.getStringCellValue())) {
                return false;
            }
        }
        return true;
    }
}


祝你幸福
送你一首歌 那些光——《人间世》片尾曲
附图:记录片《人间世》豆瓣9.6
读取Excel插入数据库POI_报表_02

标签:读取,POI,Excel,System,getStringCellValue,getCell,println,ptsPlateformProduct,row
From: https://blog.51cto.com/u_15939406/6004102

相关文章

  • POI Excel格式报表生成 同步下载问题解决
    前言解决POI导出功能,过时方法和新增样式放在最下面或者参考下文POI样式调节0.maven(新版本)<poi.version>4.1.2</poi.version> <dependency> <groupId>org.ap......
  • python--操作excel表格,openpyxl模块
    简介openpyxl是一个非常强大的读写Excel2010xlsx/xlsm/xltx/xltm的Python库,简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有官方......
  • SpringBoot+Mybatis-plus整合easyExcel批量导入Excel到数据库+导出Excel
    SpringBoot+Mybatis-plus整合easyExcel批量导入Excel到数据库+导出Excel 一、前言今天小编带大家一起整合一下easyExcel,之所以用这个,是因为easyExcel性能比较好,不会......
  • python excel转Markdown
    使用Python,将Excel表格转成Markdown格式。废话不多说直接上代码。Excel文件的位置:D:\data\data.xlsx代码执行完成之后会在python文件所在的位置生成一个output.txt文件,......
  • SharePoint 解决方案:配置SharePoint 2016/2019 Configuration wizard 异常
    Blog链接:​​​https://blog.51cto.com/u_13637423​​今天因给客户做Demo,执行SharePoint2016/2019 Configurationwizard 配置SharePointServer2016和2019farm环境,再......
  • python读取cmd命令行
    importosimportuiautomationasautoimportwin32clipboardasclipboardimportwin32condefgetCopy():clipboard.OpenClipboard()res=clipboard.GetC......
  • 10分钟做好 Bootstrap Blazor 的表格组件导出 Excel/Word/Html/Pdf
    上篇:BootstrapBlazor实战通用导入导出服务(Table组件)1.新建工程新建工程b14tabledotnetnewblazorserver-ob14table将项目添加到解决方案中:dotnetslnadd......
  • excel的学习7
    图表制作图表可以帮助我们更加清楚数据的趋势和走势,帮助我们看到数据中隐含的信息,相比于表格来说,图表更加简洁,使我们的数据价值进一步放大。具体操作第一步:在‘插入栏......
  • Maximum Number of Points From Grid Queries
    MaximumNumberofPointsFromGridQueriesYouaregivenan$m\timesn$integermatrix grid andanarray queries ofsize $k$.Findanarray answer ofs......
  • 怎样做excel数据透视表?
    作为一名老师,我时常需要对学生的成绩进行统计分析,有时还会用到Excel数据透视表。用过的人都知道,使用Excel制作透视表需要用到分组、求和等函数,复杂的函数对我这个Excel......