【问题标题】:Read data from xlsx using JAVA apache poi fails to read the last cell of a row使用 JAVA apache poi 从 xlsx 读取数据无法读取行的最后一个单元格
【发布时间】:2020-08-27 19:55:25
【问题描述】:

下面是从 9 个 excel 单元格中读取数据的代码。

Excel 数据格式位于代码末尾。 它有两行。 它从不读取最后一个单元格的数据,尝试了所有的组合

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Exceldata {
public static XSSFWorkbook workbook = null;
public static XSSFSheet sheet = null;
public static XSSFRow row = null;
public static XSSFCell cell = null;
public static  String[] col_name= new String[9];
public static String[][] user_data=new String[2][9];

public static void main(String[] args) {
try {
 File src= new File("C:\\Users\\Public\\Testdata.xlsx");
 FileInputStream fis=new FileInputStream(src);
 XSSFWorkbook book= new XSSFWorkbook(fis);         
 XSSFSheet sheet_userdata= book.getSheet("UserDetails");          
 for(int p=0;p<book.getNumberOfSheets();p++) 
 {
  System.out.println("Sheet Name is : "+ book.getSheetName(p));
  }
 row=sheet_userdata.getRow(0);
 for(int j =0;j<9;j++) 
 {
  cell=row.getCell(j);
  col_name[j]=String.valueOf(cell.getStringCellValue());
  System.out.println(col_name[j]);
  }
   //Read  data from cells
  for(int i=0;i<sheet_userdata.getLastRowNum();i++)
  {
  row=sheet_userdata.getRow(i+1);
  for(int k=0;k<9;k++) 
{
  if((cell=row.getCell(k))!= null) 
 {
  switch(cell.getCellType())
{
 case Cell.CELL_TYPE_STRING:
   if(k==1) 
 {
 user_data[i][k]=String.valueOf(cell.getStringCellValue());
 System.out.println(col_name[k]+" is : ");
 System.out.println(user_data[i][k]);
 }else if(k==2)
{
 user_data[i][k]=String.valueOf(cell.getStringCellValue());
 System.out.println(col_name[k]+" is : ");
 System.out.println(user_data[i][k]);
}
 else if(k==3) 
{
 user_data[i][k]=String.valueOf(cell.getStringCellValue());
 System.out.println(col_name[k]+" is : ");
 System.out.println(user_data[i][k]);
}
else if(k==5) 
{
 user_data[i][k]=String.valueOf(cell.getStringCellValue());
 System.out.println(col_name[k]+" is : ");
 System.out.println(user_data[i][k]);
 }
else if(k==6) 
{
 user_data[i][k]=String.valueOf(cell.getStringCellValue());
 System.out.println(col_name[k]+" is : ");
 System.out.println(user_data[i][k]);
 }
else if(k==7) 
{
 user_data[i][k]=String.valueOf(cell.getStringCellValue());
 System.out.println(col_name[k]+" is : ");
 System.out.println(user_data[i][k]);
 }
 else if(k==8) 
{
  user_data[i][k]=String.valueOf((cell.getStringCellValue()));
System.out.println(col_name[k]+" is : ");
System.out.println(user_data[i][k]);
}
break;
case Cell.CELL_TYPE_NUMERIC:
 if(k==0) 
{
 user_data[i][k]=String.valueOf((long)(cell.getNumericCellValue()));
 System.out.println(col_name[k]+" is : ");                                        
 System.out.println(user_data[i][k]);                                                                              
 }
else if(k==4) 
{
 user_data[i][k]=String.valueOf((long)(cell.getNumericCellValue()));
 System.out.println(col_name[k]+" is : ");
 System.out.println(user_data[i][k]);
 }
break;
 case Cell.CELL_TYPE_BOOLEAN:
user_data[i][k]=cell.getStringCellValue();
System.out.println(user_data[i][k]);
 break;
case Cell.CELL_TYPE_BLANK:
 //user_data[i][k]="";
if(k==8) 
{
 user_data[i][k]=String.valueOf((cell.getStringCellValue()));
 System.out.println(col_name[k]+" is : ");
 System.out.println(user_data[i][k]);
}
break;
case Cell.CELL_TYPE_FORMULA:
  user_data[i][k]=String.valueOf(cell.getCellFormula());
 System.out.println(user_data[i][k]);
 break;
 case Cell.CELL_TYPE_ERROR:
user_data[i][k]=String.valueOf(cell.getErrorCellString());
 System.out.println(user_data[i][k]);
 break;
}
}
}
}
}catch(Exception e) 
{
e.printStackTrace();
}
                                                            
                                            
 }

 }

XLS 表数据有两行这样(注意:状态单元格为空)

S.No.| ID |First Name |Last Name |联系电话|Email id |用户模式|频道|状态 1 test@test.com Ram singh 45455666 xyz@test.com 密码 XYZ 空单元格

【问题讨论】:

  • 对于第一个选项,它在这一行给出错误

标签: java arrays selenium


【解决方案1】:

选项 1 您已检查单元格空条件但未检查“”此条件。如果您已手动将数据添加到 Excel 工作表,则单元格可能不是空白并且有一些空间等。尝试添加此

if((row.getCell(k))!= ""){
//now check column is 8
if(k==8)

选项 2 该单元格类型可能是未知的,因此也添加此案例

case Cell.CellType _NONE 

选项 3 您希望该单元格类型为空白,但它可能是数字或字符串,因此请尝试在这两个开关案例中添加 K==8 条件或首先找出该单元格的特定类型。

【讨论】:

  • 对于第一个选项,它在这一行给出错误 if((cell=row.getCell(k))!= null) ,所以当条件 if((cell=row.getCell(k) )!= "") 添加到它的 OR 中,它给出编译错误为 XSSFCell 和字符串无法比较的字符串。当 K 变为 8 时,它只会停在这一行 if((cell=row.getCell(k))!= null) 并开始执行下一行。我在两个切换条件中都添加了 K==8 但是当 K= 8 ,它只是出现在 if((cell=row.getCell(k))!= null) 行,然后跳过。
【解决方案2】:

实际上,当使用getcell(int k);时单元格为空白或空或其中没有值时它会给出NULL指针异常;所以解决方案在if((cell=row.getCell(k))之前! =null) 添加一行以将 null 转换为空白,如下所示 单元格=row.getcell(k,row.CREATE_NULL_AS_BLANK)。

【讨论】:

    猜你喜欢
    • 2012-09-12
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多