java--poi技术解析Excel入库

Java实现Excel批量导入数据库 springboot实现Excel批量导入数据库 前言:Java实现,Excel数据表,MySQL数据库,具体步骤如下… 阅读详情

概述:

apache POI是可以对微软office文档进行读和写的工具。

官网

http://poi.apache.org/

组件功能:

POI中的组件(HSSF和XSS)可以读写excel

HSSF和XSSF的区别:

  • HSSF:操作97格式的excel,扩展名:.xls 纯二进制,最大行数65535。
  • XSSF:操作2007格式excel,扩展名:.xlsx压缩的xml,最大理论无限行。

两个格式的选择:

如果没有特别的要求,不超过65535,优先选.xls,效率高。否则选.xlsx。

使用

导入坐标

        <poi.version>3.17</poi.version>

        <!-- Apache POI -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>${poi.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>${poi.version}</version>
		</dependency>

测试数据

测试页面

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8" />
    <title>数据生成</title>
</head>
<body>
<div>
    <a href="/FileUpload/template/ceshi.xlsx" download="测试表.xlsx">点击下载</a>
    <form method="post" id="file" action="" enctype="multipart/form-data">
        <h3>选择一个文件:</h3>
       <input id="excelFile" type="file" name="uploadFile" />
       <br/><br/>
       <input type="button" value="上传" onclick="uploadFiles();"/>
    </form>
</div>
</body>
<script src="js/jquery-1.10.2.js" type="text/javascript"></script>
<script>
    function uploadFiles(){
// 	var uploadFile = $('#excelFile').get(0).files[0];
        var uploadFile = new FormData($("#file")[0]);
        console.log(uploadFile);
        if("undefined" != typeof(uploadFile) && uploadFile != null && uploadFile != ""){
            $.ajax({
                url:'../upload/templateFile',
                type:'POST',
                data:uploadFile,
                async: false,
                cache: false,
                contentType: false, //不设置内容类型
                processData: false, //不处理数据
                success:function(res){
                    console.log(res.message);
                    console.log(res.data);
                },
                error:function(){
                    alert("上传失败!");
                }
            })
        }else {
            alert("选择的文件无效!请重新选择");
        }
    }
</script>
</html>

pojo

package cn.bufanli.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

/**
 * @author BuShuangLi
 * @date 2019/4/11
 * 解析excel 测类类
 */
@Entity
@Table(name = "address")
public class Address  implements Serializable {
	/**
	 * 主键属性:id
	 * GeneratedValue: 指定主键策略
	 * Column:指定列名,如果和属性名一致则可以省略
	 */
	@Id
	//@GeneratedValue(strategy = "")
	@Column(name="id")
	private Long id;
	/**
	 * 序号
	 */
	@Column(name="serial_number")
	private String serialNumber;
	/**
	 * 省份
	 */
	@Column(name="province")
	private String province;
	/**
	 * 城市
	 */
	@Column(name="city")
	private String city;
	/**
	 * 区域
	 */
	@Column(name="area")
	private String area;
	/**
	 * 邮编
	 */
	@Column(name="zip_code")
	private String zipCode;

	get&&set方法略
}

数据库建表语句

CREATE TABLE `address` (
  `id` bigint(20) NOT NULL COMMENT '主键id',
  `serial_number` varchar(20) COLLATE utf8mb4_cs_0900_ai_ci DEFAULT NULL COMMENT '序号',
  `province` varchar(20) COLLATE utf8mb4_cs_0900_ai_ci DEFAULT NULL COMMENT '省份',
  `city` varchar(20) COLLATE utf8mb4_cs_0900_ai_ci DEFAULT NULL COMMENT '城市',
  `area` varchar(20) COLLATE utf8mb4_cs_0900_ai_ci DEFAULT NULL COMMENT '区域',
  `zip_code` varchar(255) COLLATE utf8mb4_cs_0900_ai_ci DEFAULT NULL COMMENT '邮编',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_cs_0900_ai_ci;

统一返回Message类

package cn.bufanli.utils;

import java.io.Serializable;

/** @author bsl */
public class Message<T> implements Serializable {

  /** id */
  private String id;
  /** 状态码 */
  private String code;
  /** 返回数据 */
  private T data;
  /** 返回信息说明 */
  private String message;
     /**
      * 分页总条数
      */
  private Long total;
     /**
      * 总页数
      */
     private Long totalPage;
  public Message() {}

   get&&set略
}

 

id生成工具类

https://blog.youkuaiyun.com/adminBfl/article/details/86536225

controller

package cn.bufanli.controller;

import cn.bufanli.dao.AddressDao;
import cn.bufanli.pojo.Address;
import cn.bufanli.utils.IdWorker;
import cn.bufanli.utils.Message;
import com.sun.javafx.scene.control.skin.VirtualFlow;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.*;

/**
 * @author BuShuangLi
 * @date 2019/2/14
 */
@Controller
@RequestMapping("upload")
public class UploadController {
    //id生成工具类
	@Autowired
	private IdWorker idWorker;
    //持久层接口
	@Autowired
	private AddressDao addressDao;
     /**
      * 解析excel保存到数据库
      *
      * @return
      */
     @ResponseBody
     @RequestMapping(value="templateFile", method= RequestMethod.POST)
     public Message uploadExcel(@RequestParam MultipartFile uploadFile) throws Exception {
          Message message =  new Message();
          //创建集合接受解析的数据
		List<Address> objects = new LinkedList<>();
		//解析excel 入库
		//解析97  .xls  方法和07 版本一模一样
		//HSSFWorkbook hssfWorkbook = new HSSFWorkbook(uploadFile.getInputStream());

		//解析07版本  .xlsx
		//1.打开工作部
		XSSFWorkbook xssfWorkbook = new XSSFWorkbook(uploadFile.getInputStream());
		//2.打开工作表
		//根据名字获取 不推荐使用  名字是 在文件左下角
		//xssfWorkbook.getSheet("Sheet1");
		//根据索引获取 推荐
		XSSFSheet sheetAt = xssfWorkbook.getSheetAt(0);
		//3.遍历表中的每一行
		for (Row row : sheetAt) {
			//跳过第一行标题
			if(!(row.getRowNum()==0)){
				Address address = new Address();
				//存储id
				address.setId(idWorker.nextId());
				//一格一格读一格一格存
				//第一个是数字
				Cell cell = row.getCell(0);
				//数字用String 字符串接受
				cell.setCellType(CellType.STRING);
				//生成的数据是数字的话会带有 .0
				address.setSerialNumber(cell.getStringCellValue());
				String province = row.getCell(1).getStringCellValue();
				address.setProvince(province);
				String city = row.getCell(2).getStringCellValue();
				address.setCity(city);
				String area = row.getCell(3).getStringCellValue();
				address.setArea(area);

				//数字用String 字符串接受
				Cell zipCode = row.getCell(4);
				zipCode.setCellType(CellType.STRING);
				address.setZipCode(zipCode.getStringCellValue());
				//存到集合
				objects.add(address);
			}
		}
		//保存
		List<Address> addresses = addressDao.saveAll(objects);
		message.setData(addresses);
		message.setMessage("成功");
		return message;
     }

	/**
	 * 存储到本地
	 * @param filecontent
	 */
     public void approvalFile( MultipartFile filecontent){
          OutputStream os = null;
          InputStream inputStream = null;
          String fileName = null;
          try {
               inputStream = filecontent.getInputStream();
               fileName = filecontent.getOriginalFilename();
          } catch (IOException e) {
               e.printStackTrace();
          }
          try {
               String path = "F:\\test\\";
               // 2、保存到临时文件
               // 1K的数据缓冲
               byte[] bs = new byte[1024];
               // 读取到的数据长度
               int len;
               // 输出的文件流保存到本地文件
               File tempFile = new File(path);
               if (!tempFile.exists()) {
                    tempFile.mkdirs();
               }
               os = new FileOutputStream(tempFile.getPath() + File.separator + fileName);
               // 开始读取
               while ((len = inputStream.read(bs)) != -1) {
                    os.write(bs, 0, len);
               }
          } catch (IOException e) {
               e.printStackTrace();
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               // 完毕,关闭所有链接
               try {
                    os.close();
                    inputStream.close();
               } catch (IOException e) {
                    e.printStackTrace();
               }
          }
     }

}

 

使用poi解析excel表格数据 使用poi对excel数据进行解析 很多crm系统都需要将各种格式excel表格中的数据进行解析,并导入到数据库中。接下在就将针对java中使用poi对excel表格中的数据进行解析的过程进行讲解。 POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (P... 阅读详情

相关推荐

昇腾910B多卡环境下hccl-test性能调优实战

本文详细介绍了昇腾910B多卡环境下hccl-test性能调优的实战经验,包括环境搭建、CANN工具链配置、性能测试与高级调优技巧。通过优化缓冲区、PCIe拓扑和中断亲和性设置,显著提升多卡通信效率,为AI训练提供稳定高效的计算支持。

weixin_29216049的博客 826

Java实现Excel表读取数据并入库

慢慢学习慢慢成长 先介绍一下需求:现在有一张Excel表,表里面数据并不是统一的,而是有三个数据库表对应的数据类似如图: 类似于这样的一张表。分别对应三张数据库表,下面先说一下我的思路。用的是POI的jar包。 <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.po...

光遇帝君的博客 2516

宏基因组分析|完整分析流程梳理

今天先从最基础的全流程框架说起,无论是刚接触的萌新,还是想查漏补缺的同行,都能找到有用的信息。

weixin_70911870的博客 3161

JavaFX技巧15:ListView自动滚动

我最近不得不为FlexGanttFX实现自动滚动功能,并认为我的解决方案可能对其他人有用。 您可以在下面的清单中找到它的基本概念。 主要思想是使用后台线程来调整列表视图使用的虚拟流节点的像素位置。 当检测到“靠近”顶部或底部边缘的拖拉时,线程开始。 “接近”由接近变量定义。 通过为接近值使用属性以及为线程化工作使用类型“任务”和“服务”,显然可以改进此代码。 package com.d...

最佳 Java 编程 1285

【matlab】MATLAB 变量详解与应用

在 MATLAB 中,变量可以通过赋值操作进行定义。例如,要定义一个名为xx = 10;在这个例子中,我们创建了一个名为x的变量,并将其赋值为 10。需要注意的是,MATLAB 是一种动态类型语言,因此不需要显式地声明变量的类型。变量名必须以字母开头。变量名可以包含字母、数字和下划线。变量名区分大小写。不要使用 MATLAB 中的关键字(如forif等)作为变量名。

小吴同学的博客 2211

【Unity Animation 2D】从零到一:骨骼绑定与IK动画实战指南

本文详细介绍了Unity中2D骨骼绑定与IK动画的实战流程,从角色素材准备、骨骼系统创建到权重绘制和IK设置,逐步指导开发者掌握2D动画制作技巧。通过反向动力学(IK)技术,实现更自然的角色动画效果,适用于游戏开发和动画制作。

weixin_30430677的博客 369

《step3:tiny-Spring-IoC学习三》——为bean注入属性

这一步,我们想要为bean注入属性。我们选择将属性注入信息保存成PropertyValue对象,并且保存到BeanDefinition中。这样在初始化bean的时候,我们就可以根据PropertyValue来进行bean属性的注入。Spring本身使用了setter来进行注入,这里为了代码简洁,我们使用Field的形式来注入。 ------------------------------

keep innocent 705

从NHANES到发表:如何用survey包完成符合CDC要求的统计分析(含完整R代码)

本文详细介绍了如何利用R语言的survey包,对美国国家健康与营养调查数据进行符合CDC要求的统计分析。文章重点解析了NHANES数据的复杂抽样设计、权重变量的正确选择与调整,并提供了从数据获取、清洗、构建调查设计对象到执行加权回归及生成发表级表格的完整R代码实战指南,帮助研究者避免常见错误,确保分析结果的准确性与可发表性。

weixin_29054245的博客 521

JavaFX2: 鼠标拖动选择和Ctrl+Shift连续区间选择的ListView

JavaFX2的ListView中的多选没有提供鼠标拖动选择的功能,同时按下Ctrl和Shift后连续的区间选中也不支持,以下代码用于处理这两个问题,细节见代码注释:   import com.sun.javafx.scene.control.skin.ListViewSkin; import com.sun.javafx.scene.control.skin.VirtualFlow; imp

alanzyy的技术路程 4359

算法笔记(胡凡)学习笔记@Kaysen

本文旨在记录算法笔记学习过程中的收获和一些知识点,部分易错知识点只针对个人而言,CCF-CSP考试冲鸭!!! Chapter 2 C/C++快速入门(易错知识点) 2.1 基本数据类型 变量定义注意区分大小写。 一、整型 整型int,32bit(4Byte),取值范围是,绝对值在范围内的整数都可以定义成int。 长整型long long,64bit(8Byte),取值范围是,绝对值超过的整数就需要用long long存储。 ...

Kaysen_Zhao的博客 2896

飞牛fnNAS免费内网穿透之zerotier篇

本文介绍了如何通过ZeroTier实现飞牛NAS的远程文件共享。首先,用户需要在ZeroTier官网注册账号并创建虚拟局域网。接着,分别在Windows和飞牛NAS上安装ZeroTier客户端,并通过SSH登录飞牛NAS进行配置。安装完成后,用户可以在ZeroTier页面中授权设备加入虚拟局域网。最后,通过Windows的“网上邻居”功能访问飞牛NAS的共享文件夹,实现跨局域网的文件共享。这种方法不仅适用于文件共享,还可以用于打印机共享和远程桌面连接。

dgnankai的专栏 2463

使用POI解析Excel

Excel作为一种常用的数据存储格式,在很多项目中都会有相应的导入导出的功能。这篇文章会介绍如何使用Java操作Excel,以及如何解决大文件读写时内存溢出的问题。 1、OpenXML标准 Word、Excel、PPT是Office办公套件中最常用的三个组件。早期的Office套件大都使用二进制格式,也就是最常见以.doc、.xls、.ppt为后缀的文件;直到07这个划时代的版本将基于XM...

优快云文章已停止维护,后续文章会在 https://blog.hufeifei.cn 持续更新 2万+

2024年数字IC秋招-海康威视-数字逻辑设计工程师-笔试题

笔试题型:单选 + 多选笔试平台:百一测试(电脑监控)笔试时间:1h30minA. AW通道B. D通道C. B通道D. AR通道return x++;x = 5;y = Foo(x);

qq_42135020的博客 3199

Java对Excel(03,07)进行上传、解析、验证、入库

原文地址:Java对Excel(03,07)进行上传、解析、验证、入库作者:吴俊采 本文主要记录最近的工作内容,使用java实现对Excel(03,07)的上传、解析、验证和入库(PostgreSQL)。   一。上传  实际就是实现文件上传至服务器即可,但是方法有很多,首先要考虑采用何种方法实现上传:   1.参考文章: Java开发过程中文件上传的各种方式全面总结  http

zenggouzai 5262

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java之POI解析excel

3 创建Java程序 3.1 版本说明 Spring Boot: 2.1.13 Apache POI: 4.0.1 JDK: 1.8 IDE: IDEA Office Excel: 2010 3.2 创建项目 创建一个名为Excel的Spring Boot项目,并添加maven依赖和相应的Java代码,最后的项目结构如下图所示: pom.xml文件内容如下所示: <?xml versi...

weixin_41490593的博客 7089

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java POI 导入Excel以及解析Excel

用的SSM框架,所需要的jar包如图所示:,链接地址:jar包下载  ,下面直接上代码。 1、ExcelUtil工具类 [java] view plain copy  print? "color:#993399;">"font-size:18px;color:#993399;">import java.text.DecimalFormat

Kei's Blog 2200

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java解析excel,poi和easyExcel

做项目遇到上传excel并解析excel内容组装成结构话json,网上查了很多方法,做了poi和easyExcel两个方法的对比

sinat_40723403的博客 5744

JAVA解析EXCEL(JExcelAPI,POI,EasyExcel)

Java 解析excel 的三种方式(JExcelApi,POI,EasyExcel)

RwTo的博客 1万+

java使用poi读取跨行跨列excel

java使用poi读取跨行跨列excel1.需求背景2.实现思路分析3.重要代码片码说明4.完整的代码类如下:5.完整的demo代码提供如下6.demo执行结果 1.需求背景 最近有一个工作任务是用户提供了一个基础的excel文件,要求首先将excel中的数据解析并入库,然后再做后续的一些业务处理,因此涉及到excel的数据读取,正常如果是一行一行数据的excel的读取,还是比较简单,但用户提供的数据涉及跨行跨列问题,就稍有点麻烦,比如数据样例如下: 需要将跨行跨列数据也读取出来最后进行入库处理,比如

冰之杍的博客 3722

JAVA解析Excel文件的两种方式 --Poi技术

目前有两种比较主流的技术解析Excel文件,这里我讲解的是Poi技术的实现。 话不多话,Poi包里有4个主要的类,包括: Workbook------工作表,通过WorkbookFactory的create(FileInputStream fis)方法获取, Sheet------------表格,Workbook实例的getSheetAt(int num)方法获取, Row--------...

人生最遗憾的莫过于:轻易地放弃了不该放弃的,固执地坚持了不该坚持的 8005

java poi读取excel数据_java 使用POI读取excel数据

原文:http://doc.okbase.net/0201zcr/archive/161440.html一、定义Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。二、所需jar包:三、简单的一个读取excel的demo1、读取文件方法/*** 读取出filePath中的所有数据信息* @param f...

weixin_33716616的博客 1万+

Java使用POI解析Excel文件的工具类【通用】

这个工具类针对 .xls 和 .xlsx 的文件都可以进行解析,并且返回List<List<String>> 类型,外面的List是excel中有多少行,里面的是每一行的每个单元格的数据,都转为了String类型,以“,”号分隔。进行遍历循环时,拿到每个String直接以“,”分割就可以获取到里面的值。 1. 先给出pom 依赖: ...

第一行代码 2641

java poi解析excel,带合并单元的excel

首先,mavn导入jar包                        org.apache.poi             poi             3.11                               org.apache.poi             poi-ooxml             3.11

shang的博客 5130

java代码实现Excel的导入以及批量数据入库操作

工作当中经常会遇到poi的操作以及批量数据导入库中,使用PLSQL或者Navicat这两种工具导入数据量大的时候也很耗费时间 以下是我个人项目当中总结的POI操作和批量数据入库 导入POI的坐标或者下载jar包导入项目 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId>

心南南心 1563

Java Poi 向excel中插入图片

博客 package com.unicom.yangjiabin.utils; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java....

易的博客 7053
上一篇: angularjs--变量监控方法
下一篇: mq--activeMQ
别浪呀
博客等级 码龄8年 1万+粉丝 260原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值