当前位置: 首页 > 知识库问答 >
问题:

以双数组POI方式读取数据

章阳波
2023-03-14

那么,如何使用Apache POI以双数组形式获取数据呢?

我的代码如下:

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;
import org.apache.poi.ss.usermodel.Cell;



public class XLRead {

public static void main(String args[]) throws Exception {
    Scanner in = new Scanner(System.in);
    String wb_name;
    wb_name = in.next();

    File excel = new File("/Users/Documents/Sample_data/" + wb_name);
    FileInputStream fis = new FileInputStream(excel);


    HSSFWorkbook wb = new HSSFWorkbook(fis);
    HSSFSheet sh = wb.getSheet("sample");

    int rowNum = sh.getLastRowNum() + 1;
    //System.out.println(rowNum);
    int colNum = sh.getRow(0).getLastCellNum();
    //System.out.println(colNum);

    String[][] X0 = new String[rowNum][colNum];
    // Here i tried to define X0 as double[][]. But it doesn't work.
    for (int i = 3; i < 368; i++){
        HSSFRow row = sh.getRow(i);
    //System.out.println(row);
        for (int j = 4; j <= 27; j++){
            HSSFCell cell = row.getCell(j);
            //System.out.println(cell);     
            String value = cellToString(cell);
            X0[i][j] = value;               
            //System.out.println(value);
        }
    }
    } 
public static String cellToString(HSSFCell cell){
    // i tried changing this function to public static double cellToDouble(HSSFCell cell)
    int type;
    Object result = null;
    type  = cell.getCellType();
    if(cell!=null){
    if (type == Cell.CELL_TYPE_FORMULA)
    {
    switch (cell.getCachedFormulaResultType()){
        case Cell.CELL_TYPE_NUMERIC:
            result = cell.getNumericCellValue();

            break;
        case Cell.CELL_TYPE_STRING:
            result = cell.getStringCellValue();
            break;
        default:
            throw new RuntimeException("Data type not applicable");
    }
    }
    }
}

共有1个答案

国景铄
2023-03-14

您应该使用getNumericCellValue()直接返回的双值,而不需要以一种非常奇怪的方式将其转换为String,并尝试将其转换回来,即。

public static double getCellValue(HSSFCell cell){

    switch (cell.getCachedFormulaResultType()){
        case Cell.CELL_TYPE_NUMERIC:
            return cell.getNumericCellValue();

            break;
        case Cell.CELL_TYPE_STRING:
            return Double.parse(cell.getStringCellValue());
           break;
        default:
            throw new RuntimeException("Data type not applicable");
    }
}

然后将结果值放入double[]中。

顺便说一句,我还会检查为什么您仍试图读取字符串格式的值。如果将所有值存储为Excel表中的数值,则仅使用CELL_TYPE_NUMERIC-case就足够了。

 类似资料:
  • 问题内容: 我正在使用POI HSSF读取excel数据,并且正在使用JUnit根据数据库proc RefCursor检查数据。 将来自Refcursor的数字数据(例如100)与excel工作表100中的数据进行比较时,Junit测试失败,但由于POI将其读取为100.0,因此Junit测试失败。 这是我正在构建的通用框架程序,因此该框架应该足够智能以忽略“ .0”。关于如何解决这个问题的任何投

  • 问题内容: 我正在从文件中读取行,然后使用它们。每行仅由浮点数组成。 我整理了几乎所有内容,将这些行转换为数组。 我基本上是这样做的(pseudopython代码) 这行得通,但是似乎有点违反直觉和反pythonic,我想知道是否有更好的方法来处理来自文件的输入,以使最后有一个充满浮点数的数组。 问题答案: 快速回答: 如果您经常处理此类数据,csv模块将有所帮助。 如果您感到疯狂,甚至可以使用完

  • 本文向大家介绍python读取与处理netcdf数据方式,包括了python读取与处理netcdf数据方式的使用技巧和注意事项,需要的朋友参考一下 netcdf是气候数据中的主流格式,当涉及到大范围的全球数万个格网点数据时,使用python脚本可以较快地读取与处理。 举例子 以上这篇python读取与处理netcdf数据方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐

  • 本文向大家介绍php读取csv数据保存到数组的方法,包括了php读取csv数据保存到数组的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php读取csv数据保存到数组的方法。分享给大家供大家参考。具体分析如下: csv是常用的excel格式的替代品,很多时候我们导出数据是都会导成csv格式的,这样和excel没什么区别,下面的程序是要读取csv数据保存到数组我们要对数据进行操作,所以

  • 我有一个Json数组文件的格式:-[[{key1:value1},{key2:value2},{key3:value3}],[{key1:value4},{key2:value5},{key3:value6}]] 我需要使用AWS glue爬取上述文件,并读取json模式,其中每个键都作为模式中的一列。我尝试使用标准的json分类器,但它似乎不起作用,并且模式加载为数组。我需要从S3读取json文

  • 我需要实现一个函数,该函数获取一个由n个元素和一个数字k组成的数组A作为输入,并返回一个包含大小为k的所有子集的数组(每个子集本身就是一个数组)。 定义函数的类型,并为函数实现至少3个测试(使用assert)。它应该是Javascript/Typescript和functional 例如:FunSubset([1,2,3],2)= 有什么想法吗?