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 java.util.List;

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();
	}
	/**
	 * 读取行值
	 * @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) {
			return String.valueOf(hssfCell.getNumericCellValue());
		} else {
			return String.valueOf(hssfCell.getRichStringCellValue());
		}
	}
	/**
	 * 读取单元格的值
	 * @param hssfCell
	 * @return
	 */
	@SuppressWarnings("static-access")
	private static String readCellValue(XSSFCell hssfCell) {
		if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(hssfCell.getBooleanCellValue());
		} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
			return String.valueOf(hssfCell.getNumericCellValue());
		} else {
			return String.valueOf(hssfCell.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;
	}
	
}

 

调用方式

List<String> columns = new ArrayList<String>();
   columns.add("CUST_NAME1");//战略客户名
   columns.add("CUST_NAME2");//客户名
   columns.add("INCOME_TYPE");//收入类型
   columns.add("DEPT_NAME");//部门名称
   columns.add("YEAR");//年份
   columns.add("MONTH");//月份
   columns.add("AMT");//金额
   ExcelUtil.setColumns(columns);


   String retJson = ExcelUtil.readExcel(upload);

 

【Android】使用poi读取、创建、另存Excel,支持xlsx和部分xls格式 在这里,我使用的poi是3.12版本的,它不是Apache官方poi包 下载jar包后,将其放进libs文件夹里面,选中两个jar包,鼠标右键点击add As library…添加为库 点击OK 打开build.gradle文件,添加完依赖后就可以开始 敲键盘 开发文档可以参考这里,需要注意的是我们使用的poi包不是Apache软件基金会的,部分方法及其功效会有所不同!!! 这里简要介绍我们... 阅读详情

相关推荐

使用POI对excel文件进行读取

使用POI对excel文件进行读取 Excel转换为HTML表格(包括样式) Excel读取图片 Excel读取附件 使用POI对excel文件进行读取 excel转换HTML 代码块 ReadExcel2Html 类 ColorInfo 类 ColorUtil 类 OperaColor 类 Excel读取图片 代码块 Picture 类主要用于保存图片所在位置x和y分别

aiquan2016的博客 2710

java使用poi读写excel(处理上下标和科学计数法)

poi指定sheet读写excel

on the way . . . 2158

基于POI的java读取excel文件,通用类

只有读取,没有写入

应用poi插件读取excel文件(通用)

有时需要将excel文件的数据导入到数据库中,如何能快速而简单的将excel文件导入对不会的攻城狮们尤为重要,下面就在java项目中实现了该功能

liuyegongzhi的博客 639

java poi excel 模板导入通用工具类,支持2003/2007

java poi excel 模板导入通用工具类,支持 2003/2007 版excel 详细看里面的README.md

java_poi导入excel通用工具类V0915

java导入excel的工具类。支持单个对象的赋值,列表对象的赋值,指定坐标的赋值。主要利用的是poi的技术,java反射和自定义注解。 20170915,解决了不能导入带有公式字段的excel的问题

poi读取excel中上下标操作

import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFCell; import org.ap...

qq_23490959的博客 2993

cdh zookeeper未授权访问(安全漏洞)处理

前言: 最近公司在做安全漏洞扫描。发现cdh zookeeper存在未授权访问的问题。 ZooKeeper的节点有5种操作权限: CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写) 注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限 ZooKeeper的身份的认证有4种方式: world:默认方式,相当于全世界都能访问 auth:代表已经认证通过的..

belialxing的专栏 2447

通过POI统一读取Excel文件(兼容97-2003和2007+两种格式)

1、引言  由于系统需要提供给用户导入Excel文件数据的功能,但Excel文件有97-2003和2007+两种格式,且要求给用户有较大的灵活性。导入Excel文件的处理无非就是读取Excel文件的内容,然后根据一定的业务规则进行校验,校验正确后处理写入系统。对Excel文件的读取可通过JXL或POI两个Jar来完成,决定使用POI来开发,但POI对两种格式的处理又有所不同,那么如何通过POI灵

ichasel的专栏 1934

openEuler 22.03 安装 openGauss 5.0.2 部署手册

openEuler 22.03 安装 openGauss 5.0.2 部署手册

全国服务器高效代维 1427

基于粒子群算法的PID控制器优化设计

粒子群算法、PID、寻优

qq_46107700的博客 2万+

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 j

贝爷的博客 2023

【实战解析】Ubuntu双网卡冲突:如何解决同一网段下网关无法访问及上网问题

本文深入解析Ubuntu服务器双网卡配置在同一网段时引发的路由冲突问题,导致网关无法ping通及无法上网。通过分析路由表与Metric值原理,提供使用route命令调整优先级及修改Netplan配置文件的实战解决方案,确保主次路由明确,一劳永逸解决网络冲突。

f9g0h的博客 282

通用POI读取Excel封装成JavaBean

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

qq_39623859的博客 1万+

Ansys 19 Mechanical 流体密封分析

start point是一个特殊的概念,在仿真中ansys将从start point开始搜索会发生流体渗漏的点,可以简单理解为从start point开始,向四周逐个节点比较节点上的接触压紧力与流体压力,如果流体压力大于压紧力,则发生渗漏。事实上此处的最后一个参数是指定start point类型的,为1代表这是一个“open”的start point。在通常情况下,如果不人为指定start point,程序会自动寻找指定流体压力面的“边界”,对于二维情况,就是曲线的两个端点,对于三维情况就是曲面的边线。

Dio980的博客 1534

手把手教你用gmid方法设计二级运放:从理论到仿真全流程(附避坑指南)

本文详细介绍了使用gmid方法设计二级运放的全流程,从理论到仿真实践,特别针对初学者常见问题提供避坑指南。通过系统化的晶体管尺寸确定技术,帮助工程师在性能、功耗和面积之间找到最佳平衡点,适用于模拟集成电路设计中的关键模块开发。

weixin_29213525的博客 272

POI读取Excel封装

对POI读取Excel进行了一个简单封装,代码如下: package com.aline.zkdm; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import o...

csdn_meng的博客 1万+

WorkBuddy最新更新特性(2026-07-21)

WorkBuddy最新更新特性

AI人人懂 578

java apache.poi实现Excel 2003、2007 数据读取

java apache.poi实现Excel 2003、2007 数据读取

mr_lili_1986的博客 9348

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32F407中文手册

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

Java使用POI库读取Excel表格代码实战详解

在当今数据驱动的世界中,Excel已经成为了许多组织和企业最常用的数据存储和分析工具之一。然而,手动处理大量的Excel数据是一项繁琐且耗时的任务。为了提高效率,开发人员通常需要使用编程工具来自动读取和处理Excel文件中的数据。POI(Poor Obfuscation Implementation)库是一个功能强大的库,专门设计用于处Microsoft Office格式的文档,其中包括Excel文件。POI库提供了各种API,使开发人员能够轻松地取、写入和操作Excel文本文件。

weixin_67589420的博客 4214

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

利用poi 读取excel通用工具类

poi excel导出通用工具 | 这一行是废话 根据上一篇利用poi 导出excel通用工具类去年写的一个工具类,同样根据业务需求重新封装了一个读excel 工具类,感觉还算通用,分享到博客,欢迎各位大神来吐槽; 1. maven pom.xml 导入poi依赖 &lt;!-- 2007--&gt; &lt;dependency&gt; ...

SoberChina的博客 1351

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java 读取 Excel 读取兼容2003,2007

java 读取 Excel 读取兼容2003,2007   需要jar包,至少要这几种 poi-3.7-20101029.jar poi-ooxml-3.7-20101029.jar poi-ooxml-schemas-3.7-20101029.jar xmlbeans-2.3.0.jar package com.yiwanj.core.util; import jav

Rose19891213的专栏 1435

POI读取excel合并单元格内容

import java.io.File; import java.io.IOException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; im...

qq_23292875的博客 5843
上一篇: web版2048小游戏 --- 学习用
下一篇: HttpClient模拟get,post请求并发送请求参数(json等)
sfSam
博客等级 码龄16年 13粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值