使用ApachePOI在java中获取2D数组第二个值中的null

使用ApachePOI在java中获取2D数组第二个值中的null,java,arrays,apache-poi,Java,Arrays,Apache Poi,我在2D数组中得到空值。当我在调用方法(hello)中打印出数组的值时,我得到了正确的值,但在被调用方(main方法)中,当打印出第二个值时,我得到了null 节目如下 package TestngPackage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.openxml4j.exceptions.InvalidFormatExce

我在2D数组中得到空值。当我在调用方法(hello)中打印出数组的值时,我得到了正确的值,但在被调用方(main方法)中,当打印出第二个值时,我得到了null

节目如下

package TestngPackage;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class MyReadExcel {

    public static XSSFWorkbook workbook;

    public static String[][] hello() throws IOException{

        FileInputStream fis = new FileInputStream(new File("F:\\TestExcel\\Test.xlsx"));
        workbook = new XSSFWorkbook(fis);
        XSSFSheet sheet = workbook.getSheetAt(0);
        String s[][] = new String[2][2];

        for (int x = 0; x < sheet.getLastRowNum() + 1; x++){
            Row row=sheet.getRow(x);

            for (Cell c : row){
                int y = 0;
                s[x][y] = c.getStringCellValue();
                //System.out.println(s[x][y]);
                y++;
            }           

        }

        workbook.close();
        fis.close();
        return s;
    }

    public static void main(String[] args) throws InvalidFormatException, IOException {

        String str[][];
        str = hello();

        for (int x = 0; x < str.length; x++){

            for (int y = 0; y < str[x].length; y++){
                System.out.println(str[x][y]);
            }

            System.out.println();
        }   

    }

}
package-TestngPackage;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入org.apache.poi.openxml4j.exceptions.InvalidFormatException;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
公共类MyReadExcel{
公共静态XSSF工作簿;
公共静态字符串[][]hello()引发IOException{
FileInputStream fis=新的FileInputStream(新文件(“F:\\TestExcel\\Test.xlsx”);
工作簿=新XSSF工作簿(fis);
XSSFSheet sheet=workbook.getSheetAt(0);
字符串s[][]=新字符串[2][2];
对于(int x=0;x
我想你把int y=0放错了;在循环内部,所以每次y变量初始化时都使用0值,这就是为什么值会覆盖0元素。这就是为什么可以在循环中找到第二个元素为null

所以你需要把inty=0位于之外(单元格c:行)用于 按照下面的例子循环


for(int x=0;x我认为您错误地将int y=0;放入循环中,因此每次使用0值初始化y变量时,都会使用0元素覆盖值。这就是为什么您可以在循环中发现第二个元素为null

因此,您需要将int y=0;置于for(单元格c:row)for的外部 按照下面的例子循环


for(int x=0;xy)你需要把int y=0;放在for(Cell c:row)之外{循环并尝试一下它会对你有用的只是一个简单友好的提示,如果你遵循这样的风格指南,你可能会发现调试起来容易得多。这会让你的代码更容易阅读,错误也会更明显!你需要把int y=0;放在for(Cell c:row)之外{循环并尝试它会对你有用。只是一个简单友好的提示,如果你遵循这样的风格指南,你可能会发现调试会容易得多。它会使你的代码更容易阅读,错误也会突出!
for (int x=0; x<sheet.getLastRowNum()+1; x++){
            Row row=sheet.getRow(x);
            int y=0; 
            for (Cell c : row){
                // int y=0; every time its init with 0 so value would be override on every time 
                s[x][y]=c.getStringCellValue();
//              System.out.println(s[x][y]);
                y++;
            }           
        }