java poi读取excel,2147483647问题
读取excel文件的时候,某些单元格是数字,但是可能超过10位,例如电话号码,读取之后会变为2147483647,改变下读取的长度就好了。例如value += (long) cell.getNumericCellValue() + separate;如果long改为int就会出现这个问题,因为int接收最大长度为10位数,最大长度为2147483647,所以int改为long就好了。
以下为详细代码:
package poi_import_excel;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class poi_import_excel {
public static void main(String[] args){
List<String> allExcel= readExcel("D:/Interface/interface.xls","|");
int max = allExcel.size();
System.out.println(max);
for(int i = 0 ;i < max ;i++){
System.out.println(allExcel.get(i));
}
}
public static List<String> readExcel(String filePath, String separate) {
List<String> person=new ArrayList<>();
// 创建对Excel工作簿文件的引用
try {
HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(filePath));
// 在Excel文档中,第一张工作表的缺省索引是0
HSSFSheet sheet = wookbook.getSheetAt(0);
// 获取到Excel文件中的所有行数
int rows = sheet.getPhysicalNumberOfRows();
int max_cells = 0;
// 获取最长的列,在实践中发现如果列中间有空值的话,那么读到空值的地方就停止了。所以我们需要取得最长的列。<br> //如果每个列正好都有一个空值得话,通过这种方式获得的列长会比真实的列要少一列。所以我自己会在将要倒入数据库中的EXCEL表加一个表头<br> //防止列少了,而插入数据库中报错。
for (int i = 0; i < rows; i++) {
HSSFRow row = sheet.getRow(i);
if (row != null) {
int cells = row.getPhysicalNumberOfCells();
if (max_cells < cells) {
max_cells = cells;
}
}
}
//System.out.println(max_cells);
// 遍历行
for (int i = 1; i < rows; i++) {
HashMap<String, String> map = new HashMap<String, String>();
// 读取左上端单元格
HSSFRow row = sheet.getRow(i);
// 行不为空
if (row != null) {
String value = "";
// 遍历列
String b_id = null;
for (int j = 0; j < max_cells; j++) {
// 获取到列的值
HSSFCell cell = row.getCell(j);
if (cell == null) {
value += "NULL"+separate;
} else {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
try {
value += String.valueOf(cell.getNumericCellValue())+ separate;
} catch (IllegalStateException e) {
value += String.valueOf(cell.getRichStringCellValue())+ separate;
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
// 如果有日期的话,那么就读出日期格式
// 如果是数字的话,就写出数字格式
if (HSSFDateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd");
Date date2 = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
String date1 = dff.format(date2);
value += date1 + separate;
} else {
//int 的最大值为2147483647,当数字超过10位会有问题,所以此处用long。
value += (long) cell.getNumericCellValue() + separate;
}
break;
case HSSFCell.CELL_TYPE_STRING:
String ss = cell.getStringCellValue();
if (ss == null || "".equals(ss)) {
value = "NULL"+separate;
} else {
value += cell.getStringCellValue() + separate;
}
break;
default:
value += "NULL"+separate;
break;
}
}
if (j == 0) {
b_id = value.substring(1, value.length() - 2);
//b_id = b_id.replaceAll("'", "");
}
}
String valueresult = value.substring(0, value.length() - 1);
((HashMap<String, String>) map).put(b_id, valueresult);
}
person.add(map.toString());
}
wookbook.cloneSheet(0);
} catch (Exception e) {
e.printStackTrace();
person.add("error:" + e.toString());
}
return person;
}
}
java poi读取excel,2147483647问题相关推荐
- java poi读取excel报错Your InputStream was neither an OLE2 stream, nor an OOXML stream
错误描述 java poi读取excel报错Your InputStream was neither an OLE2 stream, nor an OOXML stream 楼主是读取的另存为的exc ...
- java poi读取excel文件(xlsx)
读取excel文件的方法有许多种,这篇文章主要描述通过poi读取excel文件. 先maven导入jar包 <dependency><groupId>org.apache.po ...
- 使用Java POI读取excel文档
Java使用POI读取excel文档教程 一:Poi的介绍 1.简介 1.由apache公司提供 2.Java编写的免费开源的跨平台的Java API 3.提供API给Java程序对Microsoft ...
- java poi 读取excel 图片_Poi读取excel插图的方法和操作步骤
我们在使用Excel制作表格的时候,有时会使用"Poi读取excel插图",但是很多初学者都不懂也不会制作.下面,我就给大家讲一下"Poi读取excel插图"的 ...
- java poi 读取excel 编码_Java使用POI 读取和写入Excel指南
做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求:网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0. ...
- java POI 读取Excel文件 将图片、表格生成到PPT
临时有个需求,要求通过读取EXCEL文件,然后通过文件名称去给定的文件夹内查找图片,并将图片写入PPT中,详情以表格的形式写到图片右侧,每张图片一页PPT.效果如图所示: 用到的jar包如下(mave ...
- java poi 读取Excel中的手机号或电话号码,手机号变成1.8312345678E10格式数据的解决方法
[现象] 共有2行数据 [张三1, 1.8312345678E10, 张三2, 1.8312345679E10] [解决方法] v.add(row.getCell(1)+""); ...
- java poi读取excel公式,返回计算值(转)
http://blog.csdn.net/CYZERO/article/details/6573015 经测试,确实可以 1 package hrds.zpf.poi; 2 3 import o ...
- java poi读取excel日期格式数据
在Excel中的日期格式,其数值为距离1900年1月1日的天数. 可以自己单独写个方法返回值为String型的方法将获得的HSSFCell类型转化为String再用SimpleDateFormat. ...
最新文章
- apk反编译工具-apktool
- python基础-装饰器
- python怎么连接数据库_python3.x怎么连接mysql数据库
- Hough变换的基本思想
- .NET分布式框架 | Orleans 知多少
- 「软件项目管理」成本估算模型——Walston-Felix模型和COCOMO Ⅱ模型
- 韩顺平php视频笔记62-67 php面向对象
- 利用socket.io+nodejs打造简单聊天室
- 软考高级系统架构设计师:软件系统建模方法及其应用
- 机器学习知识点整理(《机器学习》——周志华)
- 悉尼大学商业数据科学与计算机学院,悉尼大学数据科学专业
- SPS PPS AAC音频 采样率 比特率
- 计算机提示应用程序无法启动,电脑应用程序无法正常启动提示0x000007b怎么办?...
- Mysql中查找附近人的查询语句
- Confluence 查看文档乱码问题
- 戏如人生,人生如戏!
- 小尾巴微博html5版,小尾巴
- 自然语言表达处理笔记01—— 1.正则表达式 2.文本标记化 3.词干提取和词形还原 4.中文分词
- windows10使用cuda11搭建pytorch深度学习框架——运行Dlinknet提取道路(二)——代码运行问题解决
- 获取富文本编辑器的纯文本内容
热门文章
- JUC--Condition简介和使用
- ColorOS12 adb精简列表 oppo rce2已测【2022.9.11更新】
- 【C++】vector数组排序
- Python绘图实例23:彩色房子绘制
- 你是如何学习 Java 的?
- KubeVela 1.4:让应用交付更安全、上手更简单、过程更透明
- 日常训练 2017.04.08 凶♂残♂的猪猪???
- Avalonia的资源和样式
- python调用openpyxl包操作excel文件
- docker rabbitmq 安装 延迟队列 rabbitmq_delayed_message_exchange 插件