使用POI导入Excel并解决Cannot get a text value from a numeric formula cell

最近做Excel导入

有两个方法:JXL 和POI

各有问题:JXL 导入:文件中有宏就报错,找不到解决方法。

POI导入:文件太大造成内存溢出。

先说问题 :Exception in thread "main" java.lang.IllegalStateException: Cannot get a text value from a numeric formula cell

这个问题是因为那一单元格使用了 “求和函数”,内容不是文本。

package cmcc.gz.platform.emss.purchase;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  

public class XlsMain {
  public static void main( String[] args) throws IOException {
    XlsMain xlsMain = new XlsMain();
    xlsMain.readXls();
  }  

  private void readXls() throws IOException{
    InputStream is = new FileInputStream( "F:\\导入模板V1.1.xls");
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook( is);
    // 循环工作表Sheet
    for(int numSheet = 2; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++){
      HSSFSheet hssfSheet = hssfWorkbook.getSheetAt( numSheet);
      if(hssfSheet == null){
        continue;
      }
      // 循环行Row
      for(int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++){
        HSSFRow hssfRow = hssfSheet.getRow( rowNum);
        if(hssfRow == null){
          continue;
        }
        // 循环列Cell
        for(int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++){
          HSSFCell hssfCell = hssfRow.getCell( cellNum);
          if(hssfCell == null){
            continue;
          }
          if(hssfRow.getCell(9)!=null){//处理函数单元格问题,先将单元格内容转为String
        	  hssfRow.getCell(9).setCellType(hssfCell.CELL_TYPE_STRING);
         }
          System.out.print("" + getValue( hssfCell));
        }
        System.out.println(" >>>");
      }
    }
  }  

  @SuppressWarnings("static-access")
  private String getValue(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 if (hssfCell.getCellType() ==hssfCell.CELL_TYPE_STRING){
    	return String.valueOf(hssfCell.getStringCellValue());
    }else{
      return String.valueOf( hssfCell.getStringCellValue());
    }
  }
}

使用POI导入Excel并解决Cannot get a text value from a numeric formula cell

时间: 2024-10-29 14:44:11

使用POI导入Excel并解决Cannot get a text value from a numeric formula cell的相关文章

Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件. 2.excel定义成模板,里面只填写了所需要的数据,有可能数据有问题. 3.在导入的时候就需要对每个excel单元格的数据进行验证. 4.验证完之后,若所有数据正确,那么批量保存.若有一点点错误,就不执行保存操作,并提示错误原因. 思路: 1.完美使用了Map的功能,先将xml中的数据存入map

poi导入excel

Spring+SpringMVC+Maven+MyBatis+Mysql此环境下的POI导入 此文档讲解Excel导入的功能 1.1 POI导入excel 浏览器效果展示: 前端代码 前端Html代码: <!-- 导入 --> <div class="layui-inline"> <div class="layui-input-block" style="margin-left: 10px;"> <but

Java poi导入excel(合并单元格的excel)(转)

poi导入excel代码示例 原文地址:https://mbd.baidu.com/newspage/data/landingshare?pageType=1&isBdboxFrom=1&context=%7B%22nid%22%3A%22news_9588929214493290157%22%2C%22sourceFrom%22%3A%22bjh%22%7D 原文地址:https://www.cnblogs.com/zbq6/p/12501683.html

使用POI导入Excel异常Cannot get a text value from a numeric cell 解决

POI操作Excel时因为Excel数据Cell有不同的类型,会出现Cannot get a text value from a numeric cell的异常错误. 异常原因:Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串并写入数据库时,就会出现Cannot get a text value from a numeric cell的异常错误. 此异常常见于类似如下代码中:row.getCell(i).getStringCellValue(): 解决办法:

java poi导入EXCEL

import jxl.DateCell; import jxl.NumberCell; import org.apache.log4j.Logger; 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.use

java poi 导入excel

最近项目需要导入excel,网上有很多例子,自己整合记录下,兼容2003和2007,暂时没有添加图片处理功能. 所需jar包  http://pan.baidu.com/s/1sjPuWDR package example.poi; import java.io.*; import java.text.DecimalFormat; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; impor

Java POI导入Excel文件

今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar poi-excelant-3.8-20120326.jar poi-ooxml-3.8-20120326.jar poi-ooxml-schemas-3.8-20120326.jar poi-scratchpad-3.8-20120326.jar xmlbeans-2.3.0.jar 附上百度云盘

poi 导入excel 数据转对象

package org.rui.xls; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Field; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Iterator; import java.

使用回调方式写POI导入excel工具类

场景是这样的:为了做一个excel导入的功能,为了尽可能的写一个通用的工具类,将与poi有关的东西都封装起来,以便以其他人员只用关心自己的业务,不用和poi打交道. 写到最后,现在还是会有poi的东西暴漏出来一点,暴漏出来的这个应该是必须的. 为了模拟这个场景,先写两个service方法,用于和数据库交互,存入从模板中读取的数据.代码如下: 1.berthservice public class BerthService { public void update(){ System.out.pr