这里调用了HBase的API和操作excel的POI

一、配置文件pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>Test</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>15</maven.compiler.source><maven.compiler.target>15</maven.compiler.target></properties><dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>2.1.9</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.1.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency></dependencies></project>

二、函数实现

参数说明:

  • filePath传入excel的绝对路径
  • keyName你需要作为rowkey列的列名

这里需要注意的是,调用POI去获取excel表格的长度时,你获得的长度和宽度大概率是不准确的,该数据一定比实际的值要大,因为POI算的是长度,而不是有几个单元格。这就意味着如果你的单元格被你拉的很宽很长,那么POI计算出来的行数和列数必定比实际要大。就拿我来举例,我一个excel表格的长度是50(有50行),可是使用POI计算出来的行数是200,还以为出了BUG。

当然,在下面的函数中解决了该问题,该函数会把你excel列名(第一行)作为HBase列族中的列名,对应的数据就是value值

 public static void Excel_to_HBase(String filePath,String keyName) throws IOException {HBaseHelper.Exec_CreateNamesplace(tableName);HBaseHelper.Exec_CreateTable(tableName, family);if(!filePath.endsWith(".xlsx")){System.out.println("传入文件不是excel类型");}FileInputStream fis = null;Workbook workbook = null;//获取绝对路径try{fis = new FileInputStream(filePath);} catch (Exception e) {e.printStackTrace();}//创建工作表try{//XSSF读取后缀为xlsx的excel文件assert fis != null;workbook = new XSSFWorkbook(fis);}catch (Exception e){try{//HSSF读取后缀为xls的excel文件workbook = new HSSFWorkbook(fis);}catch (Exception ex){ex.printStackTrace();}}//得到一个工作表assert workbook != null;Sheet sheet = workbook.getSheetAt(0);//获取表头Row rowHead = sheet.getRow(0);//获取总列数int totalColumnNum = rowHead.getPhysicalNumberOfCells();//获取总行数,这里会因为excel格式的问题而获取与实际数据不一致的行数信息,获取的都是比实际行数大的值int totalRowNum = sheet.getLastRowNum();//获取keyName所在列的列数int rowIndex = 0;for (int i = 0; i < totalColumnNum; i++) {Cell sheetTableName = rowHead.getCell(i);if(String.valueOf(sheetTableName).equals(keyName)){rowIndex = i;}}//获取excel实际长度int ListLength = 0;for (int i = 0; i < totalRowNum; i++) {Row row = sheet.getRow(i+1);Cell cell1 = row.getCell(rowIndex);//指定格式,否则无法读取数字列cell1.setCellType(CellType.STRING);String data = cell1.getStringCellValue();if (!data.isEmpty()){ListLength = i;}}//循环遍历添加数据for (int i = 0; i < totalColumnNum; i++) {//不添加作为行键的数据列if (i!=rowIndex) {Cell cell = rowHead.getCell(i);if(!String.valueOf(cell).isEmpty()) {System.out.println(cell);//判断是否为空if (!String.valueOf(cell).isEmpty()) {for (int j = 0; j <= ListLength; j++) {Row row = sheet.getRow(j + 1);Cell cell1 = row.getCell(i);Cell key = row.getCell(rowIndex);//指定格式,否则无法读取数字列cell1.setCellType(CellType.STRING);String data = cell1.getStringCellValue();//调用函数Exec_AddData(tableName, family, String.valueOf(key), String.valueOf(cell), data);}}}}} }
}
//插入数据public static boolean Exec_AddData(String Tname,String family,String rowkey,String column,String value){try {Put put = new Put(Bytes.toBytes(rowkey));put.addColumn(Bytes.toBytes(family), Bytes.toBytes(column), Bytes.toBytes(value));TableName tableName = TableName.valueOf(Tname);GetConn().getTable(tableName).put(put);return true;} catch (IOException e) {return false;}

上传Excel到HBase数据库(POI、poi-ooxml)相关推荐

  1. springboot实现上传Excel文件与数据库中的数据进行比对

    springboot实现上传Excel文件与数据库中的数据进行比对 首先先写好文件上传的接口,然后上传需要比对数据的文件,在点击数据比对 下面是一部分数据比对的代码: 后端controller部分: ...

  2. springboot上传excel表格到数据库

    1.引入相关poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi< ...

  3. 使用ocupload和POI一键上传Excel并解析导入数据库

    使用的工具如下:  JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...

  4. POI上传Excel的小问题处理

    package com.platform.utils.excel;import com.platform.utils.RRException; import org.springframework.w ...

  5. SSM项目的excel文件上传并添加到数据库

    SSM项目的excel文件上传并添加到数据库(新手,不足之处请多多指教) 基于学校的课设,要用到excel文件的上传和数据库导入,在网上找了好多demo,最后找到一篇使用poi的,经过修改后,可以正常 ...

  6. php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...

  7. php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...

  8. laravel-admin / Dcat admin 上传Excel并导入数据到数据库

    准备工作 安装maatwebsite/excel composer require maatwebsite/excel laravel-admin 效果图 创建按钮 $grid->tools(f ...

  9. 上传excel到服务器端,并写入到mssql数据库

    经常会有人问这个问题,所以整好一个就放上来!这里只涉及到实现,并不涉及到性能或者可拓展性! 本例子测试成功!(vs2008 +sql2005+office2007) 思路:先上传XLS文件,然后用Ol ...

  10. java 文件上传Excel解析(表头不固定顺序,多sheet页)并插入数据库

    文件上传返回存贮路径 /** * 前端上传文件 返回存储路径 * */public static String fileUpload(HttpServletRequest request, HttpS ...

最新文章

  1. 数据结构(5)之单链表的操作(补充)
  2. Redhat 5.4 Orcle RAC 数据库 从10.2.0.1升级到 10.2.0.4
  3. Linux Network Administrators Guide
  4. 前端面试题--重要基础知识回顾(一)
  5. [error] MFC错误不能将参数1从const char [3]转换为const wchar_t *
  6. C语言那点事——如何从零学好C语言?
  7. 基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?
  8. Strange List CodeForces - 1471B
  9. 肖仰华 | 知识图谱落地的基本原则与最佳实践
  10. plsql连接远程Oracle的方法
  11. 免费干货课程!发放官方证书!参与更有礼品相送!戳进绝不后悔~
  12. Java--接口、抽象与继承
  13. ServiceStack 项目实例 010 ServiceStack.Northwind - 2
  14. Andrew Ng机器学习公开课笔记 -- 朴素贝叶斯算法
  15. ubuntu 安装、卸载重装mysql 8.0
  16. JProfiler 使用说明
  17. STM32F4应用笔记(二)利用蜂鸣器播放天空之城
  18. 【毕业设计】python+opencv+机器学习车牌识别
  19. 【慧河网络安全组】Web基础和http协议培训题_1
  20. qnx 设备驱动开发_QNX简介

热门文章

  1. spring-kafka源码解析
  2. Windows消息钩子[键盘监控]
  3. 雨林木风Ghost XP SP3 装机版 YN9.9 九月修正版 【雪豹】
  4. 全面剖析雅虎助手以及网络实名的流氓行径(4)
  5. 2021高考成绩答题卡查询,【助力高考】2021届高考答题卡原来长这样,赶快看看...
  6. Android ActivityManager一些API介绍
  7. WordPress小程序源码 社区论坛小程序源码 知识付费商城小程序下载
  8. 汉字大全20000个字_男生秀恩爱的说说简短八字 小情话大全暖心8个字
  9. 如何理解UEFI的事件机制(三)——时钟中断
  10. Mac删除声音输出设备