读取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问题相关推荐

  1. 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 ...

  2. java poi读取excel文件(xlsx)

    读取excel文件的方法有许多种,这篇文章主要描述通过poi读取excel文件. 先maven导入jar包 <dependency><groupId>org.apache.po ...

  3. 使用Java POI读取excel文档

    Java使用POI读取excel文档教程 一:Poi的介绍 1.简介 1.由apache公司提供 2.Java编写的免费开源的跨平台的Java API 3.提供API给Java程序对Microsoft ...

  4. java poi 读取excel 图片_Poi读取excel插图的方法和操作步骤

    我们在使用Excel制作表格的时候,有时会使用"Poi读取excel插图",但是很多初学者都不懂也不会制作.下面,我就给大家讲一下"Poi读取excel插图"的 ...

  5. java poi 读取excel 编码_Java使用POI 读取和写入Excel指南

    做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求:网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0. ...

  6. java POI 读取Excel文件 将图片、表格生成到PPT

    临时有个需求,要求通过读取EXCEL文件,然后通过文件名称去给定的文件夹内查找图片,并将图片写入PPT中,详情以表格的形式写到图片右侧,每张图片一页PPT.效果如图所示: 用到的jar包如下(mave ...

  7. java poi 读取Excel中的手机号或电话号码,手机号变成1.8312345678E10格式数据的解决方法

    [现象] 共有2行数据 [张三1, 1.8312345678E10, 张三2, 1.8312345679E10] [解决方法] v.add(row.getCell(1)+""); ...

  8. java poi读取excel公式,返回计算值(转)

    http://blog.csdn.net/CYZERO/article/details/6573015 经测试,确实可以 1 package hrds.zpf.poi;  2  3  import o ...

  9. java poi读取excel日期格式数据

    在Excel中的日期格式,其数值为距离1900年1月1日的天数.  可以自己单独写个方法返回值为String型的方法将获得的HSSFCell类型转化为String再用SimpleDateFormat. ...

最新文章

  1. apk反编译工具-apktool
  2. python基础-装饰器
  3. python怎么连接数据库_python3.x怎么连接mysql数据库
  4. Hough变换的基本思想
  5. .NET分布式框架 | Orleans 知多少
  6. 「软件项目管理」成本估算模型——Walston-Felix模型和COCOMO Ⅱ模型
  7. 韩顺平php视频笔记62-67 php面向对象
  8. 利用socket.io+nodejs打造简单聊天室
  9. 软考高级系统架构设计师:软件系统建模方法及其应用
  10. 机器学习知识点整理(《机器学习》——周志华)
  11. 悉尼大学商业数据科学与计算机学院,悉尼大学数据科学专业
  12. SPS PPS AAC音频 采样率 比特率
  13. 计算机提示应用程序无法启动,电脑应用程序无法正常启动提示0x000007b怎么办?...
  14. Mysql中查找附近人的查询语句
  15. Confluence 查看文档乱码问题
  16. 戏如人生,人生如戏!
  17. 小尾巴微博html5版,小尾巴
  18. 自然语言表达处理笔记01—— 1.正则表达式 2.文本标记化 3.词干提取和词形还原 4.中文分词
  19. windows10使用cuda11搭建pytorch深度学习框架——运行Dlinknet提取道路(二)——代码运行问题解决
  20. 获取富文本编辑器的纯文本内容

热门文章

  1. JUC--Condition简介和使用
  2. ColorOS12 adb精简列表 oppo rce2已测【2022.9.11更新】
  3. 【C++】vector数组排序
  4. Python绘图实例23:彩色房子绘制
  5. 你是如何学习 Java 的?
  6. KubeVela 1.4:让应用交付更安全、上手更简单、过程更透明
  7. 日常训练 2017.04.08 凶♂残♂的猪猪???
  8. Avalonia的资源和样式
  9. python调用openpyxl包操作excel文件
  10. docker rabbitmq 安装 延迟队列 rabbitmq_delayed_message_exchange 插件