请问poi cell.getcelltype=0是数字,poi cell.getcelltype=1是string,poi cell.getcelltype=2是时间吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问poi cell.getcelltype=0是数字,poi cell.getcelltype=1是string,poi cell.getcelltype=2是时间吗?相关的知识,希望对你有一定的参考价值。

如果是时间的话,那格式有什么要求,1/2/2013这种应该是返回是几,还有11.64%返回是几

日期可以直接按字符串处理,如果这个日期需要和其它cell进行互动,那就要使用公式型。

11.64%也是字符串。

Excel虽然提供了大量的用户界面特性,但它仍然保留了第一款电子制表软件VisiCalc的特性:行、列组成单元格,数据、与数据相关的公式或者对其他单元格的绝对引用保存在单元格中。

代码:

Workbook excelWB = null;

excelWB = new XSSFWorkbook(excelFile);

oneSheet = excelWB.getSheetAt(0);

oneRow = oneSheet.getRow(rowNum);

if (oneRow == null)

continue;

// 获取第几列对象

oneCell = oneRow.getCell(1);

if (oneCell == null)

continue;

switch (oneCell.getCellType())

case HSSFCell.CELL_TYPE_STRING:

System.out.println(oneCell.getStringCellValue());

case HSSFCell.CELL_TYPE_ERROR:

break;

扩展资料:

通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。

参考资料来源:百度百科-字符串

参考技术A CellType 类型 值
CELL_TYPE_NUMERIC 数值型 0
CELL_TYPE_STRING 字符串型 1
CELL_TYPE_FORMULA 公式型 2
CELL_TYPE_BLANK 空值 3
CELL_TYPE_BOOLEAN 布尔型 4
CELL_TYPE_ERROR 错误 5追问

那时间什么的,1/2/2013是不是属于公式型啊 ,还请问一下,还有11.64%返回是几

追答

日期可以直接按字符串处理,如果这个日期需要和其它cell进行互动,那就要使用公式型。
11.64%也是字符串

本回答被提问者采纳

poi解析excel

一.遇见的问题:

  当单元格设置为日期类型时,cell.getCellStyle().getDataFormat()返回的值都为176。

  poi jar包3.14以上不支持用cell.getCellType()判断类型的方法。

  使用poi解析技术需要导入poi以及poi-ooxml两个jar包。

二.单元格的类型cell.getCellType():

  HSSFCell.CELL_TYPE_NUMERIC:数字类型(包含日期)

  CELL_TYPE_STRING:字符串

  CELL_TYPE_BOOLEAN:布尔类型

  CELL_TYPE_BLANK:没有值

  CELL_TYPE_FORMULA:公式取值

三.单元格为自定义类型的时候,cell.getCellStyle().getDataFormat()值:

  yyyy-MM-dd---->14

  yyyy年m月d日--->31

  yyyy年m月------>57

  m月d日  -------->58

  HH:mm--------->20

  h时mm分  ------>32

四.最终代码:

package cn.trashman.excel;

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

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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 PoiExcel {  
    public static void main(String[] args) {  
        poiExcel("D:/1.xlsx");  
    }  
    @SuppressWarnings("resource")
    public static void poiExcel(String fileName){  
        boolean is2007 = true;    //判断是否是excel2007格式  
        if(fileName.endsWith("xlsx"))  
            is2007 = false;
        try {  
            InputStream input = new FileInputStream(fileName);  //建立输入流  
            Workbook wb  = null;
            //根据文件格式(2003或者2007)来初始化  
            if(is2007)  
                wb = new HSSFWorkbook(input);  
            else  
                wb = new XSSFWorkbook(input); 
            Sheet sheet = wb.getSheetAt(0);
            int lastRowNum = sheet.getLastRowNum();
            for (int i = 0; i <= lastRowNum; i++) {
                //具体到某一行
                Row row = sheet.getRow(i);
                //单元格的数量
                int lastCellNum = row.getLastCellNum();
                for (int j = 0; j < lastCellNum; j++) {
                    Cell cell = row.getCell(j);
                    //根据cell中的类型来输出数据  
                    switch (cell.getCellType()) {  
                    case HSSFCell.CELL_TYPE_NUMERIC:
                        Object result = cell.getNumericCellValue();
//                        // 判断单元格是否属于日期格式  
//                        if(HSSFDateUtil.isCellDateFormatted(cell)){
//                            //java.util.Date类型  
//                            result = cell.getDateCellValue();
//                        }
                        short format = cell.getCellStyle().getDataFormat();
                        SimpleDateFormat sdf = null; 
                        if(format != 0){
//                            format == 176时是当指定单元格格式为日期是都是176
                            if(format == 14 || format == 31 || format == 57 || format == 58||format == 176){  
                                //日期  
                                sdf = new SimpleDateFormat("yyyy-MM-dd");  
                            }else if (format == 20 || format == 32) {  
                                //时间  
                                sdf = new SimpleDateFormat("HH:mm");  
                            }
                            double value = cell.getNumericCellValue();  
                            Date date = DateUtil.getJavaDate(value);  
                            result = sdf.format(date);
                        }
                        System.out.println(result);  
                        break;  
                    case HSSFCell.CELL_TYPE_STRING:  
                        System.out.println(cell.getStringCellValue());  
                        break;  
                    case HSSFCell.CELL_TYPE_BOOLEAN:  
                        System.out.println(cell.getBooleanCellValue());  
                        break;  
                    case HSSFCell.CELL_TYPE_FORMULA:  
                        System.out.println(cell.getCellFormula());  
                        break;  
                    case HSSFCell.CELL_TYPE_BLANK:  
                        System.out.println("为空");  
                        break;   
                    default:  
                        System.out.println("unsuported sell type");  
                    break;  
                    }  
                }
                System.out.println();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }  
} 

以上是关于请问poi cell.getcelltype=0是数字,poi cell.getcelltype=1是string,poi cell.getcelltype=2是时间吗?的主要内容,如果未能解决你的问题,请参考以下文章

poi怎样判断cell值是int还是double?

POI 读取 excel日期格式问题

新版POI如何获取日期类型的cell的值

java poi读取excel日期格式数据

java poi读取Excel,怎么判断空行

poi 读取Excel 电话号码一类大数字时会变成带E的数