POI读取excel文件通用代码(增强版--支持返回javaBean集合)---2003,2007

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONObject;

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;
import org.apache.poi2.hssf.usermodel.HSSFCell;
import org.apache.poi2.hssf.usermodel.HSSFRow;
import org.apache.poi2.hssf.usermodel.HSSFSheet;
import org.apache.poi2.hssf.usermodel.HSSFWorkbook;

public class ExcelUtil {
	
	private ExcelUtil(){};
	private static List<String> columns;//要解析excel中的列名
	private static int sheetNum = 0;//要解析的sheet下标
	/**
	 * poi读取excle
	 * @return
	 */
	public static String readExcel(File file){
		StringBuilder retJson = new StringBuilder();
		InputStream inStream = null;
		try {
			inStream = new FileInputStream(file);
			HSSFWorkbook workbook = new HSSFWorkbook(inStream);
			HSSFSheet sheet = workbook.getSheetAt(sheetNum);//获得表
			int lastRowNum = sheet.getLastRowNum();//最后一行
			retJson.append("[");
			for(int i = 0 ;i < lastRowNum;i++){
				HSSFRow row = sheet.getRow(i);//获得行
				String rowJson = readExcelRow(row);
				retJson.append(rowJson);
				if(i<lastRowNum-1)
					retJson.append(",");
			}
			retJson.append("]");
		} catch (Exception e) {
			try {
				inStream = new FileInputStream(file);
				XSSFWorkbook workbook = new XSSFWorkbook(inStream);
				XSSFSheet sheet = workbook.getSheetAt(sheetNum);
				int lastRowNum = sheet.getLastRowNum();//最后一行
				retJson.append("[");
				for(int i = 0 ;i < lastRowNum;i++){
					XSSFRow row = sheet.getRow(i);//获得行
					String rowJson = readExcelRow(row);
					retJson.append(rowJson);
					if(i<lastRowNum-1)
						retJson.append(",");
				}
				retJson.append("]");
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}finally{
			close(null,inStream);
		}
		return retJson.toString();
	}
	/**
	 * poi读取excle 生成实体集合
	 * @param <E>
	 * @return
	 */
	public static <E> List<E> readExcel(File file,Class<E> clazz){

		InputStream inStream = null;
		List<E> eList = new ArrayList<E>();
		try {
			inStream = new FileInputStream(file);
			HSSFWorkbook workbook = new HSSFWorkbook(inStream);
			HSSFSheet sheet = workbook.getSheetAt(sheetNum);//获得表
			int lastRowNum = sheet.getLastRowNum();//最后一行
			for(int i = 1 ;i < lastRowNum;i++){
				HSSFRow row = sheet.getRow(i);//获得行
				String rowJson = readExcelRow(row);
				E _e = json2Bean(rowJson,clazz);
				eList.add(_e);
			}
		} catch (Exception e) {
			try {
				inStream = new FileInputStream(file);
				XSSFWorkbook workbook = new XSSFWorkbook(inStream);
				XSSFSheet sheet = workbook.getSheetAt(sheetNum);
				int lastRowNum = sheet.getLastRowNum();//最后一行
				for(int i = 1 ;i < lastRowNum;i++){
					XSSFRow row = sheet.getRow(i);//获得行
					String rowJson = readExcelRow(row);
					E _e = json2Bean(rowJson,clazz);
					eList.add(_e);
				}
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}finally{
			close(null,inStream);
		}
		return eList;
	}
	/**
	 * 将json转换为Bean实例
	 * @param <E>
	 * @return
	 */
	private static <E> E json2Bean(String json,Class<E> clazz){
		JSONObject jsonObj = JSONObject.fromObject(json);
		Method[] methods = clazz.getDeclaredMethods();
		try {
			E _e = clazz.newInstance();
			for(Method m:methods){
				String name = m.getName();
				if(name.startsWith("set")){
					String keyPrev = name.substring(3,4).toLowerCase();
					String keyNext = name.substring(4);
					String val = "";
					try {
						val = jsonObj.getString(keyPrev+keyNext);
					} catch (Exception e) {
						val = "";
					}
					m.invoke(_e, val);
				}
			}
			return _e;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 读取行值
	 * @return
	 */
	private static String readExcelRow(HSSFRow row){
		StringBuilder rowJson = new StringBuilder();
		int lastCellNum = ExcelUtil.columns.size();//最后一个单元格
		rowJson.append("{");
		for(int i = 0 ;i<lastCellNum;i++){
			HSSFCell cell = row.getCell(i);
			String cellVal = readCellValue(cell);
			rowJson.append(toJsonItem(columns.get(i), cellVal));
			if(i<lastCellNum-1)
				rowJson.append(",");
		}
		rowJson.append("}");
		return rowJson.toString();
	}
	/**
	 * 读取行值
	 * @return
	 */
	private static String readExcelRow(XSSFRow row){
		StringBuilder rowJson = new StringBuilder();
		int lastCellNum = ExcelUtil.columns.size();//最后一个单元格
		rowJson.append("{");
		for(int i = 0 ;i<lastCellNum;i++){
			XSSFCell cell = row.getCell(i);
			String cellVal = readCellValue(cell);
			rowJson.append(toJsonItem(columns.get(i), cellVal));
			if(i<lastCellNum-1)
				rowJson.append(",");
		}
		rowJson.append("}");
		return rowJson.toString();
	}

	/**
	 * 读取单元格的值
	 * @param hssfCell
	 * @return
	 */
	@SuppressWarnings("static-access")
	private static String readCellValue(HSSFCell hssfCell) {
		if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(hssfCell.getBooleanCellValue());
		} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
			hssfCell.setCellType(1);//设置为String
			String str_temp = String.valueOf(hssfCell.getRichStringCellValue());//得到值
			return str_temp;
		}else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_FORMULA){
			int val = hssfCell.getCachedFormulaResultType();
			return val+"";
		} else {
			return String.valueOf(hssfCell.getRichStringCellValue());
		}
	}
	/**
	 * 读取单元格的值
	 * @param hssfCell
	 * @return
	 */
	@SuppressWarnings("static-access")
	private static String readCellValue(XSSFCell sssfCell) {
		if (sssfCell.getCellType() == sssfCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(sssfCell.getBooleanCellValue());
		} else if (sssfCell.getCellType() == sssfCell.CELL_TYPE_NUMERIC) {
			sssfCell.setCellType(1);//设置为String
			String str_temp = String.valueOf(sssfCell.getRichStringCellValue());//得到值
			return str_temp;
		}else if(sssfCell.getCellType() == sssfCell.CELL_TYPE_FORMULA){
			int val = sssfCell.getCachedFormulaResultType();
			return val+"";
		}else {
			return String.valueOf(sssfCell.getRichStringCellValue());
		}
	}
	/**
	 * 转换为json对
	 * @return
	 */
	private static String toJsonItem(String name,String val){
		return "\""+name+"\":\""+val+"\"";
	}
	/**
	 * 关闭io流
	 * @param fos
	 * @param fis
	 */
	private static void close(OutputStream out, InputStream in) {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                System.out.println("InputStream关闭失败");
                e.printStackTrace();
            }
        }
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                System.out.println("OutputStream关闭失败");
                e.printStackTrace();
            }
        }
    }
	public static List<String> getColumns() {
		return ExcelUtil.columns;
	}
	public static void setColumns(List<String> columns) {
		ExcelUtil.columns = columns;
	}
	public static int getSheetNum() {
		return sheetNum;
	}
	public static void setSheetNum(int sheetNum) {
		ExcelUtil.sheetNum = sheetNum;
	}
	
}

 

 

poi excel转换成bean 将excel数据转换成javabean对象,支持二级javabean转换! 内包含测试代码和测试文件以及所需要的jar包! 立即下载

相关推荐

Excel文档和JavaBean转换工具——excel导入导出

excel_io.jar 工具是依赖于poi和poi-ooxml两个apached的jar包 进行的开发的,分别依赖3.14 和3.17两个版本,请下载的用户注意如果名字为excel_io-poi3.14.jar na依赖的就是poi 的3.14版本了。如果名为 excel_io-poi3.17.jar,那么就是依赖的 poi 的3.17版本了。 具体使用介绍请转博文https://mp.youkuaiyun.com/postedit/83686999

JAVA 使用POI 读写 excel (for Excel 97-2008)

之前用过POI,Jacob,等其他几种方式读取office document,对比之下,还是POI比较靠谱,更新也即时~最近有项目要用,就小小的总结一下~ POI 3.8下载地址http://www.apache.org/dyn/closer.cgi/poi/dev/bin/poi-bin-3.8-beta5-20111217.zip 或者http://poi.apache.org/downl...

runfeel 253

excel表格数据转换成javaBean

通过XML配置文件,把大量的Excel表格数据转换成javaBean对象,具有通用行。使用方法简单,而且可以根据自己需要添加不通配置。

JAVA导出Excel文件

JAVA生成Excel文件并导出 一:集成POI 1、Apache POI 2、easyexcel 二:Excel相关操作 1、基础Excel导出 2、压缩Zip导出 3、错误Excel导出 4、根据Html导出 5、根据模板导出 6、根据模板及列表导出 7、根据模板及列表扩充导出 8、根据模板导出,拆分多个sheet页 9、导入 三:Excel代码 1、工具类 2、测试Bean 3、测试Service 4、测试ServiceImpl 5、测试Controller

qq_38254635的博客 2万+

java导出带样式Excel2003和Excel2007实例demo

java导出带样式Excel2003和Excel2007实例demo,居中、边框、背景颜色、字体样式、隔行变色、设置行高列宽、自动换行,有注释。

OLLAMA_HOST环境变量设置全攻略:从127.0.0.1到局域网共享的完整配置

本文详细解析了OLLAMA_HOST环境变量的核心作用与配置方法,指导用户如何将Ollama服务从仅限本机访问(127.0.0.1)扩展到局域网共享。文章涵盖了macOS、Linux、Windows三大平台的实战配置步骤,并提供了安全加固、性能优化及常见故障排查方案,是解决多设备协作访问本地AI模型的完整指南。

weixin_28455801的博客 1903

通用POI读取Excel封装成JavaBean

通用POI读取Excel封装成JavaBean工作中需要开发一个通过客户上传的Excel,读取数据并更新数据库。解析Excel有很多开源工具,由于项目中有了POI依赖,所以我使用POI来完成此次开发。考虑到直接固定针对此类业务Excel文件开发,虽然简单,但将来如果又有其它的业务同样是需要Excel来提供数据,那么就还需要做Excel的特定解析,显然这样做的话,以后有多少个业务,就需要针对...

qq_39623859的博客 1万+

OpenRadar Matlab版:毫米波雷达信号处理全流程开源库详解

毫米波雷达数据解析与信号处理是感知领域的基础能力。本文介绍毫米波雷达从ADC原始采样到距离-多普勒(Range-Doppler)热图、CFAR检测、DOA估计直至点云与生命体征参数提取的完整处理链路,并深入讲解OpenRadar(Matlab版)开源库的内核设计、核心API与实测经验。从原理上看,距离FFT与多普勒FFT构成RD谱,CFAR自适应阈值实现目标检测,相位解缠与滤波用于呼吸心跳提取。技术价值在于将繁琐的雷达数据读取、矩阵变换和算法流程标准化,免去重复造轮子。可应用于人员存在感知、生命体征监护、4

weixin_33806859的博客 322

Java导出Excel表的两种方式

背景 新公司会员分销报表管理系统有导出excel表的场景,通过查找,项目中并没有excel表相关工具类,故手写了一个工具类给大家分享一下,以备不时之需。 注意 1.该工具类包含导出和导入解析功能,其中导入解析功能需读者根据自身业务情况做进一步封装。 2.工具类中有笔者自己的CommonException异常类,需读者根据自身业务做相应调整和替换。 import com.zzx.commons.exceptions.CommonException; import org.apache.poi.hssf

Husky 1万+

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 948

实验五 循环结构第1关:斐波那契数列第2关:统计一段英文语句中的单词数和句子数第3关:密码判断第4关:通过数列求自然常数e第5关:双倍余额递减法计算固定资产折旧第6关:销售统计第7关:投资年限计算

第1关:斐波那契数列第2关:统计一段英文语句中的单词数和句子数第3关:密码判断 第4关:通过数列求自然常数e 第5关:双倍余额递减法计算固定资产折旧

pro_daily的博客 8168

POI读取Excel通用代码---支持2003,2007

package com.citics.crm.customerwidget.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import j...

javaSamBlog 234

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 507

基于poi和javabean的excel读取

excel读写工具

littlehow的专栏 753

Python 爬虫实战:手机应用商店评论数据爬取与分析

移动应用市场蓬勃发展,用户的评论数据包含了大量有价值的信息,如用户满意度、功能反馈、改进建议等。通过分析这些评论,我们可以挖掘应用的优缺点,甚至预测用户趋势。由于 Apple App Store 评论是动态加载的,我们使用。本篇博客将详细介绍如何使用 Python 爬取。爬取大量数据时,可能会遇到反爬机制。库获取 Google Play 评论。评论数据是动态加载的,需要使用。

2201_76125261的博客 2323

行人检测模型在海思平台上的部署:从 PyTorch 到 NNIE 深度优化与实践

摘要 本文详细介绍行人检测模型从PyTorch到海思NNIE平台的部署流程。首先分析了行人检测面临的挑战(尺度变化、遮挡、姿态多样性等)及边缘部署的优势(实时性、隐私保护等)。重点阐述了模型转换过程:PyTorch→ONNX→Caffe→NNIE-WK,其中PyTorch转ONNX需注意评估模式设置、虚拟输入匹配、操作集版本选择等关键点。文章旨在帮助开发者在海思3516D芯片上实现高效的行人检测,克服部署过程中的常见问题,最终实现边缘设备的实时目标检测能力。

FJN110的博客 218

POI:Excel表解析与导出通用工具类

一,概述 好几个项目都需要与Excel打交道,每次都要特地去解析、导出,费时费力!所以参考了两位作者的文章,整理了一下POI导入导出的通用工具类。虽说是通用工具类,也只能对那些比较规则的Excel表进行操作,对于那些不规则的Excel表,还是要撸起袖子加油干!(下面这张图是POI的单元格数据类型) 二,实现 1,主要依赖 POI的一些依赖以及阿里的fastjson &lt;!--...

bighuan的博客 4698

AI上推荐 之 逻辑回归模型与GBDT+LR(特征工程模型化的开端)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 8253

POI读取Excel表格和导出Excel文件

我的简书:https://www.jianshu.com/u/c91e642c4d90 我的优快云:http://blog.youkuaiyun.com/wo_ha 我的GitHub:https://github.com/chuanqiLjp 转载请注明出处:http://blog.youkuaiyun.com/wo_ha/article/details/79161616 序言: 这两天...

ljp的博客 2042

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OV9734 DATASHEET,完整规格书

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

Java读取Excel并转化为JavaBean工具类

首先,需要引入将java读取Excel的依赖包: <!--读取excel 转换为bean的依赖--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId&g...

weixin_38042513的博客 1935

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用poi导出excel报表

步骤一:导入maven包 <!--生成excel--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.10-FINAL</version> </d...

white_ShiKu的博客 357

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

workbook 保存 java_JAVA 将数据以EXCEL的形式存到本地

展开全部把一个list 保存成excel ,希望能帮助你,哈哈。package com.xxx.omsvr.softwaremanager.ifc;import java.io.IOException;import java.io.OutputStream;import java.lang.reflect.Field;import java.lang.reflect.InvocationTarge...

weixin_29646607的博客 3481

读取Execl表格,生成对应的JavaBean

本章使用jxls读取Execl表格,当然也可以用poi读取Execl 一、导入依赖 <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-jexcel</artifactId> <version>1.0.6</version> </dependency> 二、代码 import jxl.Cell; import jxl.

weixin_45881248的博客 375

SSM 使用 POI 实现EXCEL的上传与下载

导入包 import org.apache.commons.beanutils.BeanUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.NumberToTextConverter; impor...

hahaowenGG的博客 603

java 读取excel 转换csv_java poi excel转csv

在上传excel功能中,对于很大的excel文件直接上传往往会因为文件太大导致内存溢出上传失败,poi提供了首先把excel转为csv再读取上传的方法,在此记录一下。所需jar包 maven pom.xml配置:org.apache.poipoi4.1.0org.apache.poipoi-ooxml4.1.0新建XLSXCovertCSVReader工具类package com.ways.app...

weixin_39603799的博客 951
上一篇: HttpClient模拟get,post请求并发送请求参数(json等)
下一篇: java 读取.ini配置文件工具类
sfSam
博客等级 码龄16年 13粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值