private String[][] data;
// to read from excel file
public void readFile() throws IOException {
// Path to the excel file
// File datafile = new File("C:\\Users\\atomar\\Documents\test.xlsx");
// A Buffered File Input Stream to read the data
FileInputStream f = new FileInputStream(
"C:\\Users\\atomar\\Documents\\test.xlsx");
System.out.println("file found");
// InputStream fis = new BufferedInputStream(new FileInputStream("f"));
// We create a workbook which represents the excel file
XSSFWorkbook book = new XSSFWorkbook(f);
// Next a sheet which represents the sheet within that excel file
XSSFSheet sheet = book.getSheet("Sheet1");
// No of rows in the sheet
int rowNum = sheet.getLastRowNum() + 1;
System.out.println("rowNum");
// No of columns in the sheet
int colNum = sheet.getRow(0).getLastCellNum();
// A Two dimensional array of Strings which represents the data in the
// sheet
data = new String[rowNum][colNum];
{
for (int i = 0; i < rowNum; i++) {
// Get the row
XSSFRow row = sheet.getRow(i);
for (int j = 0; j < colNum; j++) {
// Get the columns or cells for the first row and keep
// looping
// for the other rows
XSSFCell cell = row.getCell(j);
// Make a call to the method cellToString which actually
// converts the cell contents to String
data[i][j] = cellToString(cell);
// data[i][j] = value;
// Here is where you write the logic to handle the data.I am
// just printing out the contents here.
//System.out.println("The value is " + data[i][j]);
}
}
Here I am calling that function
这里我调用这个函数。
public void InterestedParty() throws InterruptedException {
try {
readFile();
} catch (IOException e1) {
}
}
Getting error: There are no support for this type of cell I deleted two row data from input excel file then it started before it was working fine. But now I have deleted those row completely the also issue is there
获取错误:没有对这种类型的单元格的支持,我从输入excel文件中删除了两行数据,然后在它正常工作之前就开始了。但现在我已经完全删除了那些行,也有问题。
2 个解决方案
#1
6
if there is no data, XSSFCell
will be null
. Check whether it is null
or not. After call your cellToString()
method.
如果没有数据,XSSFCell将为空。检查它是否为空。调用cellToString()方法之后。
XSSFCell cell = row.getCell(j);
if(cell != null) {
data[i][j] = cellToString(cell);
} else {
// if you would like to set value when cell is null
row.createCell(j).setCellValue(your value);
}
#2
0
You can have a row with data, an empty row next then another row with data. The middle row can be viewed as null if is undefined, so my advice is to use an iterator for the rows.
RowIteratior here is a good start.
Also, once you have the row, you can use cell iterator to iterate over the cells. Keep in mind that an undefined cell will be viewed as null and skipped, but an empty cell is not null!
Cell iterator is doc'ed here.
Your approach is also good, but you need to check for nulls or empty at each iteration before working with the objects.
您可以使用数据行,接下来是空行,然后是另一行数据。如果未定义,中间行可以被视为null,所以我的建议是为行使用迭代器。RowIteratior是一个好的开始。而且,一旦有了行,就可以使用单元迭代器遍历单元格。请记住,未定义的单元格将被视为null并跳过,但是空单元不是null!这里是单元迭代器。您的方法也很好,但是在处理对象之前,您需要检查每个迭代的null或空值。
#1
6
if there is no data, XSSFCell
will be null
. Check whether it is null
or not. After call your cellToString()
method.
如果没有数据,XSSFCell将为空。检查它是否为空。调用cellToString()方法之后。
XSSFCell cell = row.getCell(j);
if(cell != null) {
data[i][j] = cellToString(cell);
} else {
// if you would like to set value when cell is null
row.createCell(j).setCellValue(your value);
}
#2
0
You can have a row with data, an empty row next then another row with data. The middle row can be viewed as null if is undefined, so my advice is to use an iterator for the rows.
RowIteratior here is a good start.
Also, once you have the row, you can use cell iterator to iterate over the cells. Keep in mind that an undefined cell will be viewed as null and skipped, but an empty cell is not null!
Cell iterator is doc'ed here.
Your approach is also good, but you need to check for nulls or empty at each iteration before working with the objects.
您可以使用数据行,接下来是空行,然后是另一行数据。如果未定义,中间行可以被视为null,所以我的建议是为行使用迭代器。RowIteratior是一个好的开始。而且,一旦有了行,就可以使用单元迭代器遍历单元格。请记住,未定义的单元格将被视为null并跳过,但是空单元不是null!这里是单元迭代器。您的方法也很好,但是在处理对象之前,您需要检查每个迭代的null或空值。