读取excel

2023-11-06

 
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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;

 
public class ApiBaseMethod {
	private static final String EXTENSION_XLS = "xls";
	private static final String EXTENSION_XLSX = "xlsx";

	/***
	 * 根据不同版本(03,07)得到workbook
	 */
	public Workbook getWorkbook(String filePath) throws IOException {
		Workbook workbook = null;
		InputStream is = new FileInputStream(filePath);
		if (filePath.endsWith(EXTENSION_XLS)) {
			workbook = new HSSFWorkbook(is); // 03
		} else if (filePath.endsWith(EXTENSION_XLSX)) {
			workbook = new XSSFWorkbook(is); // 07版本
		}
		return workbook;
	}
	public static void main(String[] args) {
		System.out.println(Cell.CELL_TYPE_BLANK);
		System.out.println(Cell.CELL_TYPE_BOOLEAN);
		System.out.println(Cell.CELL_TYPE_ERROR);
		System.out.println(Cell.CELL_TYPE_FORMULA);
		System.out.println(Cell.CELL_TYPE_NUMERIC);
		System.out.println(Cell.CELL_TYPE_STRING);
	}
	/**
	 * 获取cell格内容
	 */
	public String getCellValue(Cell cell) {
		if(cell==null){
			return null;
		}
		String value = null;
		// 简单的查检列类型
		switch (cell.getCellType()) {
		case Cell.CELL_TYPE_STRING: // 字符串
			value = cell.getRichStringCellValue().getString();
			break;
		case HSSFCell.CELL_TYPE_NUMERIC: // 数字
			if (HSSFDateUtil.isCellDateFormatted(cell)) {//时间格式
				Date d = cell.getDateCellValue();
				DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss
				value = df2.format(d);
			}else{
				value = (long) cell.getNumericCellValue() + "";
			}
			break;
		}
		return value;
	}
	
	public Double getCellDoubleValue(Cell cell) {
		Double value = null;
		// 简单的查检列类型
		switch (cell.getCellType()) {
		case HSSFCell.CELL_TYPE_NUMERIC: // 数字
			value = (Double) cell.getNumericCellValue();
			break;
		}
		return value;
	}

	// 休眠时间
	public void sleep(int time, String notice) {
		System.out.println("睡眠" + (time / 1000) + "S(" + getCurrentTime("MM/dd HH:mm:ss") + ")");
		if (notice != null && !"".equals(notice.trim())) {
			System.out.println(notice);
		}
		System.out.print("0s>>");
		for (int i = 0; i < time / 20000; i++) {
			try {
				Thread.sleep(20000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.print((i + 1) * 20 + "s>>");
		}
	}

	public String getCurrentTime(String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(System.currentTimeMillis());
	}
	// 参数:读取几列
	int flag = 4;
	 
	private List<String> getCompanyList(String filePath) {
		SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		List<String> list = new ArrayList<String>();
		Workbook workbook;
		try {
			workbook = getWorkbook(filePath);
			Sheet sheet = workbook.getSheetAt(0);
			int rowInt = 1;
			int cellsNum = sheet.getPhysicalNumberOfRows();
			// 判断有多少行, 循环几次
			for (int j = rowInt; j < cellsNum; j++) {
				Row row = sheet.getRow(j);
				Cell cellStart = row.getCell(0);
				String cellValue = getCellValue(cellStart);
				String cellTwo2 = null;
				String cellTwo3 = null;
				String cellTwo4 = null;
				if (cellValue == null) {
					continue;
				}
				if (flag == 2) {
					Cell cellTwo = row.getCell(1);
					cellTwo2 = getCellValue(cellTwo);
				} else if (flag == 3) {
					Cell cellTwo = row.getCell(1);
					cellTwo2 = getCellValue(cellTwo);
					Cell cellThree = row.getCell(2);
					cellTwo3 = getCellValue(cellThree);
				} else if (flag == 4) {
					Cell cellTwo = row.getCell(1);
					cellTwo2 = getCellValue(cellTwo);
					Cell cellThree = row.getCell(2);
					cellTwo3 = getCellValue(cellThree);
					Cell cellfour = row.getCell(3);
					cellTwo4 = getCellValue(cellfour);
				}
				if (cellValue != null && cellValue.trim().length() > 0) {
					if (flag == 4) {
						list.add(cellValue.trim() + "@" + cellTwo2.trim() + "@" + cellTwo3.trim() + "@"
								+ cellTwo4.trim());
					} else if (flag == 3) {
						list.add(cellValue.trim() + "@" + cellTwo2.trim() + "@" + cellTwo3.trim());
					} else if (flag == 2) {
						list.add(cellValue.trim().toLowerCase() + "@" + cellTwo2.trim());
					} else if (flag == 1) {
						list.add(cellValue);
					}
				}
				continue;
			}
		} catch (Exception e) {
			e.printStackTrace();
			sleep(500000, "获取excel公司名单出错!");
		}
		if (list.size() == 0) {
			sleep(500000, "数据集为空!");
		} else {
			System.out.println("获取公司名单共:" + list.size() + " 条数据");
		}
		return list;
	}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取excel 的相关文章

  • 在Excel中过滤后打印可见区域的宏

    我有一个根据过滤表的宏column A价值观 现在我想打印only过滤器后的可见行 但遗憾的是它打印了所有行 包括过滤期间隐藏的顶部和底部行 在我的工作表中 有来自的数据Column A I 但打印区域只能是Columns C I 过滤后的
  • 将单元格背景颜色设置为其包含的 RGB 值。如何?

    下面是我希望通过手动复制和粘贴以外的方式实现的屏幕截图 这是材料设计调色板 在 Excel 中看起来很棒 如何循环遍历范围 B2 B15 并将每个单元格背景颜色设置为其相应的包含颜色 也许是一个VBA loop去经历垂直 B 单元格范围 解
  • 在没有加载项的情况下加载 Excel

    All 我编写了一个电子表格应用程序 用户通过双击我提供的图标来加载它 问题是用户有很多插件 这会降低 Excel 的速度 如何使用命令行开关加载 Excel 来禁用所有加载项 该问题适用于 Excel 2003 和 Excel 2007
  • 将 Excel 文件导入 Access 时更改数据类型

    将 Excel 文件导入 Access 时 有什么方法可以更改默认数据类型吗 顺便说一下 我使用的是 Access 2003 我知道有时我可以自由地将任何数据类型分配给正在导入的每个列 但这只能在我导入非 Excel 文件时进行 EDIT
  • Excel宏-将逗号分隔的条目拆分为新行[重复]

    这个问题在这里已经有答案了 我目前在一张纸上有这些数据 Col A Col B Col C 1 A angry birds gaming 2 B nirvana rock band 我想要做的是将第三列中的逗号分隔条目拆分并插入新行 如下所
  • 在 Android 上使用 Excel 文件

    我正在开发一个应该能够创建 读取和写入 Excel 文件的模块 是否有 推荐 轻量级 Java 库用于处理可以在 Android 上运行的 Excel 文件 欢迎提出建议 Thanks 找到一个
  • 在 Excel 工作簿中找不到链接

    我编写了一个宏来打开多个受密码保护的工作簿 这些工作簿彼此之间都有链接 因此为了方便起见 我设置了UpdateLinks 0这样在其他书籍打开之前 我就不会收到所有链接更新的密码提示 所有工作簿打开后 我尝试使用以下命令更新链接 Workb
  • 使用 VBA 从数据透视表中提取数据

    我编写了以下 vba 代码 该代码应该从 old xlsx 的某些单元格导入任何现有数据 这些单元格是数据透视表的一部分 并且 OE gt location gt qual in 作为其行的子单元格 该列由手动输入的日期决定 strForm
  • 求除某些列之外的 SUM

    以下是我所拥有的 A B C D E F G H I J K 1 2 3 4 5 6 7 8 9 10 50 为了找到SUM
  • 尝试使用变量作为自动过滤器中的条件,并带有“不等于”<>,但无法使其工作

    我正在使用 Excel VBA 使用 不等于 表达式来过滤列表 如果我使用Criteria1 lt gt Bob 代码运行完美 但如果我将 Bob 更改为变量 代码将无法运行 这有效 ActiveSheet ListObjects Rpt
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • 无法使用 Excel JavaScript API 设置 NumberFormat

    我正在使用 Excel Javascript API 在搜索文档后 仍然找不到我想要实现的解决方案 因此 我想将所有内容设置为数字格式 文本 这样 Excel 的自动格式设置就不会与任何单元格的内容混淆 不会删除前导零或更改日期格式 文档建
  • 在 Django(Python) 中向用户提供 Excel(xlsx) 文件下载

    我正在尝试使用 Django 创建和提供 Excel 文件 我有一个 jar 文件 它获取参数并根据参数生成 excel 文件 并且它可以正常工作 但是 当我尝试获取生成的文件并将其提供给用户下载时 文件损坏了 它的大小为 0kb 这是我用
  • 如何使用 C# 在 MS Excel 单元格中添加数字验证

    我的目标是限制用户在 MS Excel 单元格中仅输入 1 到 100 范围内的值 我正在以编程方式生成 Excel 文件 但是当我添加上述验证时 抛出异常Exception from HRESULT 0x800A03EC 我写的代码如下
  • 二维数组作为字典的项目

    我想用一个项目的几个属性填充字典 例子 我正在考虑拥有Item 1 and Item 2 as Dictionary键与array这将保留其属性 我需要能够单独访问项目的每个属性 因此将它们连接为一个字符串不是一种选择 我正在考虑类似下面的
  • Excel VBA 用户窗体 - 当发生变化时执行 Sub

    我有一个包含很多文本框的用户表单 当这些文本框的值发生变化时 我需要通过调用子例程 AutoCalc 根据文本框值重新计算最终结果值 我有大约 25 个框 我不想向每个调用上述子例程的文本框单独添加 Change 事件 当某些值发生变化时调
  • 根据其他列中的条件对列中的唯一值求和

    A B 1 Total 1 900 2 Product A 700 3 Product A 700 4 Product B 300
  • 在Excel中显示毫秒

    我正在尝试在 Excel 宏中显示毫秒 我有一列整数 它们是以毫秒为单位的时间戳 例如 28095200 是上午 7 48 15 200 我想在它旁边创建一个新列 以保持运行平均值并以hh mm ss 000格式 Dim Cel As Ra
  • 查看 Excel 是否处于 .NET 中的单元格编辑模式的解决方法

    我有一个用 VB NET 编写的应用程序 它通过互操作与 Excel 进行交互 我最终遇到了单元格编辑模式的已知问题 请参阅 and 堆栈溢出 https stackoverflow com questions 221984 how to
  • Excel,多个 IF AND 更高效的公式

    我正在制作一个电子表格 如下所示 Index Diff Exc Sym Sec Result Criteria Met 3 42 2 07 0 86 0 92 1 83 1 95 0 38 2 93 0 87 0 23 2 01 0 09

随机推荐

  • SpringMvc框架详解

    目录 1 概念 2 作用 3 原理 4 使用Springmvc框架 4 1创建一个maven web工程 并替换web xml文件的内容 4 2引入springmvn所依赖的jar包 4 3将DpatcherServlet注册到配置文件中
  • vue 脚手架新手入门(vue cli 3)

    文章目录 1 vue中的 绑定和 监听 1 1 v model 双向绑定 2 if else for 3 computed 计算属性 4 生命周期 属性加载顺序 5 watch 侦听器 6 components 组件 6 1 props 从
  • 数据库课程设计-图书馆管理系统(2.数据库实现-基于mysql)

    如果对你有帮助 可以给卑微的博主留个赞 关注 收藏 不是 骗一下数据 说不定以后面试就过了 拜谢 好像有读者说现在不要积分的资源也要vip才能下 如果下不了可以留邮箱到评论区或者私聊 我也把资源放到github了 地址如下 https gi
  • 【华为OD机试】拔河比赛(C++ Python Java)2023 B卷

    题目描述 公司最近准备进行拔河比赛 需要在全部员工中进行挑选 选拔的规则如下 按照身高优先 体重次优先的方式准备比赛阵容 规定参赛的队伍派出10名选手 请实现一个选拔队员的小程序 输入为一个数组 记录了部门人员的身高 体重信息 如 身高 体
  • Unity的Time.deltaTime

    当我们在编写游戏或交互应用程序时 需要控制元素的动画 运动和其他基于时间的计算 Unity游戏引擎中的Time deltaTime属性可以帮助我们实现这样的效果 这个属性提供了两个连续帧之间的时间间隔 以便我们可以根据每帧之间的持续时间来调
  • jpg解码库移植过程详解

    1 jpg解码库的源码获取 1 可以从网站下载 http www photopost com jpegsrc v6b tar gz 2 我下面的移植过程是根据jpegsrc v6b tar gz版本的jpg解码库移植的 如果是其他版本的jp
  • maven 命令建分支步骤以及注意事项

    一 在svn创建对应的目录 branches gt 分支目录 tags gt 标签目录 当前线上项目对应的版本 trunk gt 主干目录 二 运行项目中的所有的测试用例 无报错 后 三 检查pom父级pom xml文件是否有以下配置 如无
  • JAVA字符集

    1 概述 本文主要包括以下几个方面 编码基本知识 java 系统软件 url 工具软件等 在下面的描述中 将以 中文 两个字为例 经查表可以知道其GB2312编码是 d6d0 cec4 Unicode编码为 4e2d 6587 UTF编码就
  • vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页

    设置代理 避免出现跨域问题 设置代理 避免出现跨域问题 proxyTable api target https www oschina net action apiv2 changeOrigin true pathRewrite api a
  • 给你一个id你会干嘛?

    信息收集 1 扫描端口 Nmap xxx xxx xxx xxx p 目录扫描 ip地址访问 操作系统 robots txt http 192 168 5 134 xxe 抓包进行判断存在xxe漏洞 查看etc passwd 查看admin
  • File类总结

    文章目录 File类 构造方法 创建功能 删除功能 重命名功能 判断功能 基本获取功能 高级获取功能 代码示例 判断D盘下面有没有 jpg后的文件 如果有 就输出此文件名称 文件名称过滤器的实现思想及代码 File类 构造方法 public
  • C++学习 1

    引入头文件 头文件写法 引入头文件 用户自己写的头文件 lt gt 标准库 include
  • else if 非return情况下必须有else

    return 的另一种理解 if update return insert if 之后 进去 return 到不了下面 不满足 到下面 相反 即 有了return 等于else 以上 即update insert只有一个会执行 相当于els
  • 字节设备注册的驱动开发(基于汇编语言)

    CSDN话题挑战赛第1期 活动详情地址 第1期话题PK赛 参赛话题 汇编知识分享 话题描述 我们的计算机知识就像一座金字塔 底层是数学 上面是数字电路 然后是汇编 再往上是操作系统 网络 数据库 高级编程语言 框架等等 我们不可能精通这个金
  • HTML语义标签和结构标签详解

    文章目录 实体标签 meta标签 语义化标签 结构化语义化标签 列表标签 在学习标签时我们应该注意的是他的语义 而不是他的显示效果 因为显示效果是在css中进行编写的 我们一定要做到分工明确清晰 实体标签 在网页中编写代码时 我们有时会使用
  • 4.1.4 规划、设计的艺术(技术)流派和常用技法(上)

    最后更新2021 08 25 超写实 人工 gt 脚本 gt 批处理 gt 微服务 gt 公有云 gt 公共IT基础设施 代表作品 Daniel Heilig手机拍照作品 腾讯云 阿里云 amazon azure gt 综合网管 gt 私有
  • 五、easyUI中的datagrid(数据表格)组件

    1 datagrid 数据表格 组件的概述 datagrid以表格形式展示数据 并提供了丰富的选择 排序 分组和编辑数据的功能支持 datagrid的设计用于缩短开发时间 并且使开发人员不需要具备特定的知识 它是轻量级的且功能丰富 单元格合
  • Ubuntu 最简单的方式安装chrome

    1 指定安装目录如下 cd opt 2 下载包 sudo wget https dl google com linux direct google chrome stable current amd64 deb 3 查看并安装 sudo d
  • 搭建 vue 开发环境: node.js安装+vue脚手架配置

    第一步 node环境安装 1 1 如果本机没有安装node运行环境 请下载node 安装包进行安装 1 2 如果本机已经安装node的运行换 请更新至最新的node 版本 下载地址 https nodejs org en 或者 http n
  • 读取excel

    import java io FileInputStream import java io IOException import java io InputStream import java text DateFormat import