读取Excel工具类

需要的jar包
poi-3.13.jar
poi-ooxml-3.13.jar
poi-ooxml-schemas-3.13.jar
poi-scratchpad-3.9.jar

工具类1
package com.test.poi;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;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.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;/*** 两种处理方式 xlsx/xls* @author zhaowanli**/
public class ExcelUtilReader {public static String[][] getExcelData(File file){if(file == null) return null;String name = file.getName();name = name.substring(name.lastIndexOf(".")+1);InputStream is = null;try {is = new FileInputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();}if("XLSX".equalsIgnoreCase(name)){return getExcelDateAF2007(is);}else if("XLS".equalsIgnoreCase(name)){return getExcelDateBF2007(is);}else{try {throw new Exception("文件格式不正确");} catch (Exception e) {e.printStackTrace();}}return null;}//xls 2007 之前版本public static String[][] getExcelDateBF2007(InputStream inputStream) {String[][] data = null;HSSFWorkbook hssfwb = null;try {hssfwb = new HSSFWorkbook(inputStream);HSSFSheet hssfSheet = hssfwb.getSheetAt(0);data = new String[hssfSheet.getLastRowNum()+1][];int headerColNum = 0;for(int i = 0; i<=hssfSheet.getLastRowNum();i++){HSSFRow hssfRow = hssfSheet.getRow(i);if(i == 0 ){headerColNum = hssfRow.getLastCellNum();}data[i] = new String[headerColNum];for(int j = 0;j<hssfRow.getLastCellNum();j++){HSSFCell hssfCell = hssfRow.getCell(j);Object value = getHSSFCellValue(hssfCell);data[i][j] = value != null?String.valueOf(value): null;}}} catch (IOException e) {e.printStackTrace();}finally{try {if(hssfwb != null){hssfwb.close();}if(inputStream != null){inputStream.close();}} catch (IOException e) {e.printStackTrace();}}return data;}public static Object getHSSFCellValue(HSSFCell hssfCell){if(hssfCell == null) return null;Object value = null;switch(hssfCell.getCellType()){case Cell.CELL_TYPE_NUMERIC :  //数值 0value = hssfCell.getNumericCellValue();break;case Cell.CELL_TYPE_STRING :  //字符串 1value = hssfCell.getStringCellValue();break;case Cell.CELL_TYPE_FORMULA :  //公式 2value = hssfCell.getStringCellValue();break;case Cell.CELL_TYPE_BLANK :  //空值 3value = null;break;case Cell.CELL_TYPE_BOOLEAN :  //布尔 4value = hssfCell.getBooleanCellValue();break;case Cell.CELL_TYPE_ERROR :  //错误 5value = hssfCell.getErrorCellValue();break;default :value = hssfCell.getStringCellValue();}return value;}//xlsx 2007 之后版本public static String[][] getExcelDateAF2007(InputStream inputStream) {String[][] data = null;XSSFWorkbook xssfwb = null;try {xssfwb = new XSSFWorkbook(inputStream);XSSFSheet xssfSheet = xssfwb.getSheetAt(0);data = new String[xssfSheet.getLastRowNum()+1][];int headerColNum = 0;for(int i = 0; i<=xssfSheet.getLastRowNum();i++){XSSFRow xssfRow = xssfSheet.getRow(i);if(i == 0 ){headerColNum = xssfRow.getLastCellNum();}if(xssfRow == null ){data[i] = new String[0];continue;}data[i] = new String[headerColNum];for(int j = 0;j<xssfRow.getLastCellNum();j++){XSSFCell xssfCell = xssfRow.getCell(j);Object value = getXSSFCellValue(xssfCell);data[i][j] = value != null?String.valueOf(value): null;}}} catch (IOException e) {e.printStackTrace();}finally{try {if(xssfwb != null){xssfwb.close();}if(inputStream != null){inputStream.close();}} catch (IOException e) {e.printStackTrace();}}return data;}public static Object getXSSFCellValue(XSSFCell xssfCell){if(xssfCell == null) return null;Object value = null;switch(xssfCell.getCellType()){case Cell.CELL_TYPE_NUMERIC :  //数值 0value = xssfCell.getNumericCellValue();break;case Cell.CELL_TYPE_STRING :  //字符串 1value = xssfCell.getStringCellValue();break;case Cell.CELL_TYPE_FORMULA :  //公式 2value = xssfCell.getStringCellValue();break;case Cell.CELL_TYPE_BLANK :  //空值 3value = null;break;case Cell.CELL_TYPE_BOOLEAN :  //布尔 4value = xssfCell.getBooleanCellValue();break;case Cell.CELL_TYPE_ERROR :  //错误 5value = xssfCell.getErrorCellValue();break;default :value = xssfCell.getStringCellValue();}return value;}}
工具类2
package com.test.poi;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;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.xssf.usermodel.XSSFWorkbook;/*** 加强版: xlsx/xls 合并成一种处理方式* @author zhaowanli**/
public class ExcelUtilReader2 {public static SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");public static String[][] getExcelData(File file){if(file == null) return null;String name = file.getName();name = name.substring(name.lastIndexOf(".")+1);InputStream is = null;Workbook workbook = null;String[][] data = null;try {is = new FileInputStream(file);if("XLSX".equalsIgnoreCase(name)){workbook = new XSSFWorkbook(is);data = getExcelDate(workbook);}else if("XLS".equalsIgnoreCase(name)){workbook = new HSSFWorkbook(is);data = getExcelDate(workbook);}else{try {throw new Exception("文件格式不正确");} catch (Exception e) {e.printStackTrace();}}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{try {if(workbook != null){workbook.close();}if(is != null){is.close();}} catch (IOException e) {e.printStackTrace();}}return data;}public static String[][] getExcelDate(Workbook workbook){String[][] data = null;Sheet sheet = workbook.getSheetAt(0);data = new String[sheet.getLastRowNum()+1][];int headerColNum = 0;for(int i = 0;i<=sheet.getLastRowNum();i++){Row row = sheet.getRow(i);if(i == 0 ){headerColNum = row.getLastCellNum();}if(row == null ){data[i] = new String[0];continue;}data[i] = new String[headerColNum];for(int j =0;j<row.getLastCellNum();j++){Cell cell = row.getCell(j);Object value = getCellValue(cell);data[i][j] = value!=null?String.valueOf(value):null;}}return data;}public static Object getCellValue(Cell cell){if(cell == null) return null;Object value = null;switch(cell.getCellType()){case Cell.CELL_TYPE_NUMERIC :value = cell.getNumericCellValue();break;case Cell.CELL_TYPE_STRING:value = cell.getStringCellValue();break;case Cell.CELL_TYPE_FORMULA :  //公式 2value = cell.getStringCellValue();break;case Cell.CELL_TYPE_BLANK :  //空值 3value = null;break;case Cell.CELL_TYPE_BOOLEAN :  //布尔 4value = cell.getBooleanCellValue();break;case Cell.CELL_TYPE_ERROR :  //错误 5value = cell.getErrorCellValue();break;default :value = cell.getStringCellValue();}return value;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL学习笔记3: MySQL数据库基础

目录 前言目标数据库操作&#xff08;针对database 的操作&#xff09;1. 创建数据库 create database 数据库名;2. 查看数据库 show databases;3. 选中数据库 use 数据库名;4. 删除数据库 drop database 数据库名; mysql中支持的数据类型1. 数值类型: NUMERIC(M,D)2. 字符串类…

实现Slider 滑块组件标记动态变化

实现以上效果&#xff0c;下拉框、slider滑块、按钮都在同一行&#xff0c;设置flex布局后&#xff0c;发现silider滑块最右边的标记数字一直都如下竖着显示&#xff0c;后来通过给源组件的标记区.el-slider__marks-text增加一个宽度后解决该问题。 <template><div>…

Linux实验记录:使用LNMP架构部署动态网站环境

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; LNMP动态网站部署架构是一套由&…

HTML5 扩展了 HTMLDocument 类型

HTMLDocument 扩展 ​ HTML5 扩展了 HTMLDocument 类型&#xff0c;增加了更多功能。与其他 HTML5 定义的 DOM 扩展一样&#xff0c; 这些变化同样基于所有浏览器事实上都已经支持的专有扩展。为此&#xff0c;即使这些扩展的标准化相对较晚&#xff0c; 很多浏览器也早就实现…

探索亚信安慧AntDB的数据库管理之道

AntDB数据库管理系统以其卓越的性能和稳定性成为众多用户的选择之一。这款系统采用了影响力大、社区繁荣、开放度高、生态增长迅速的PG内核&#xff0c;为用户提供了稳定可靠的数据库解决方案。 数据库的稳定性对于用户来说至关重要&#xff0c;特别是在面对大规模数据处理和高…

Go语言进阶篇——泛型

前言 在开始今天有关泛型的介绍之前,我们先来看一个简单的例子&#xff0c;如果我们要设计两个int类型变量相加的函数&#xff0c;我们可以这样设计&#xff1a; func Sum (a, b int) int {return a b }如果变量要求是float类型或者是其他类型&#xff0c;我们要面对一个问题…

使用Java语言,解决斐波那契兔子问题

/* 一对兔子&#xff0c;从出生后第三个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c; 假如兔子都不死&#xff0c;问第二十个月的兔子对数为多少&#xff1f; 1 1 2 3 5 8 13 1 1 1 1 1 1 11 1 1 1 11 1 1 11 1 11 1 11 11 11 11111…

高防服务器是怎样进行防御的?

随着互联网的发展&#xff0c;网络攻击和恶意流量也日益增多&#xff0c;高防服务器作为企业网络安全的重要保障&#xff0c;越来越受到关注。那么&#xff0c;高防服务器是怎样进行防御的呢&#xff1f; 高防服务器主要是指具备防御DDoS攻击、CC攻击、7x24小时实时防御网站入…

用c++实现背包问题动态规划求解算法

背包问题是一类组合优化的问题。在其最简单的形式中,问题模型是这样的:假设你有一个能承受最大重量为W的背包和一系列物品,每个物品都有其自身的重量和价值,目标是确定哪些物品应该被选中放入背包,使得背包内物品的总价值最大,同时不超过背包的最大承重。 下面是使用C++…

【Flink集群RPC通讯机制(二)】创建AkkaRpcService、启动RPC服务、实现相互通信

文章目录 零. RpcService服务概述1. AkkaRpcService的创建和初始化2.通过AkkaRpcService初始化RpcServer3. ResourceManager中RPC服务的启动4. 实现相互通讯能力 零. RpcService服务概述 RpcService负责创建和启动Flink集群环境中RpcEndpoint组件的RpcServer&#xff0c;且Rpc…

多模态相关论文笔记

(cilp) Learning Transferable Visual Models From Natural Language Supervision 从自然语言监督中学习可迁移的视觉模型 openAI 2021年2月 48页 PDF CODE CLIP(Contrastive Language-Image Pre-Training)对比语言图像预训练模型 引言 它比ImageNet模型效果更好&#xff0c…

32单片机基础:OLED调试工具的使用

下面会介绍OLED显示屏的驱动函数模块&#xff0c;先学会如何使用&#xff0c;至于OLED屏幕的原理和代码编写&#xff0c; 我们之后会再写一篇。 现在我们就是用OLED当一个调试的显示屏&#xff0c;方便我们调试程序。 为什么要调试呢&#xff0c;是为了方便我们看现象&#…

vue中组件和插件有什么区别?

vue中组件和插件有什么区别&#xff1f; 回答思路&#xff1a;组件是什么&#xff1f;-->插件是什么&#xff1f;-->组件和插件的区别&#xff1f;-->他们的使用场景&#xff1f;组件是什么&#xff1f;组件的优势&#xff1a; 插件是什么&#xff1f;组件和插件的区别…

unity——shader基础知识点 学习笔记【个人复习向/侵删/有不足之处欢迎斧正】

一、shaderLab 1.pass渲染通道 具体实现着色器代码的地方&#xff0c;每个subshader至少有一个pass。 可以利用UsePass命令在其他Shader当中复用该Pass的代码&#xff0c;只需要在其他Shader当中使用 UsePass ”Shader路径/Pass名”&#xff0c;Unity内部会把Pass名称转换为大…

嵌入式学习之Linux入门篇——使用VMware创建Unbuntu虚拟机

目录 主机硬件要求 VMware 安装 安装Unbuntu 18.04.6 LTS 新建虚拟机 进入Unbuntu安装环节 主机硬件要求 内存最少16G 硬盘最好分出一个单独的盘&#xff0c;而且最少预留200G&#xff0c;可以使用移动固态操作系统win7/10/11 VMware 安装 版本&#xff1a;VMware Works…

Java Clip 播放MP3音频

Java Clip 播放MP3音频 1 依赖2 接口3 实现4 测试 项目Value音频格式 添加依赖*.wav(JDK 原生支持)*.pcm(JDK 原生支持)*.au(JDK 原生支持)*.aiff(JDK 原生支持)*.mp3mp3spi.jar*.flacjflac-codec.jar 1 依赖 <dependency><groupId>com.googlecode.soundlibs<…

Python | OS模块操作

一、介绍 Python的os模块提供了许多与操作系统交互的函数&#xff0c;可以用于文件和目录的操作、进程管理、环境变量的访问等。以下是os模块的一些常用功能&#xff1a; 文件和目录操作&#xff1a;os模块提供了许多函数来进行文件和目录的操作&#xff0c;如创建文件夹(os.mk…

小红书如何写标题吸引人?

好奇类&#xff1a;利用观众得不到&#xff0c;没体验过的事物&#xff0c;激发好奇心 万能公式:&#xff08; )是一种什么体验&#xff1f; 例如:日入过千是一种什么体验? 极限类&#xff1a;将抽象的内容具象化&#xff0c;吸引力强&#xff0c;让观众引起重视 万能公式…

CQT新里程碑:SOC 2 数据安全认证通过,加强其人工智能支持

Covalent Network&#xff08;CQT&#xff09;发展新里程碑&#xff1a;SOC 2 数据安全认证通过&#xff0c;进一步加强了其人工智能支持 Covalent Network&#xff08;CQT&#xff09;现已完成并通过了严格的 Service Organization Control&#xff08;SOC) 2 Type II 的合规性…

物联网和人工智能的融合

物联网和人工智能的融合 1. 物联网和人工智能的融合2. 芯片技术的进步3. 安全和隐私保护挑战4. 软件开发和调试技术的创新5. 自动化和智能化趋势 1. 物联网和人工智能的融合 随着物联网和人工智能技术的快速发展&#xff0c;嵌入式系统将更多地与物联网设备和人工智能算法相结…