我尝试从excel中读取数据并存储在矢量列表中。但是当我在我的系统中应用以下代码时,我有两个问题,希望能得到一些指导。
1)当我运行系统时,它将读取excel文件中的所有数据,但它会跳过这些空白数据。如何将其设为空字符串而不是跳过。
结果:从这个Excel file你可以看到值145和2DHatchback之间是空白数据,但系统会跳过它,怎么能我把它作为空字符串" "?。
[PAS, 04/01/2015, ALFA ROMEO, 145, 2D HATCHBACK, 5 SP MANUAL, 1598.42, GZ095G, 02, 01, 02, MULTI POINT F/INJ, ITALY, 9400, 7800]
2)当我试图删除excel中的几行数据时,我的矢量结果仍将保留已删除的数据,但保持为空。
结果:从Excel file开始,如果我手动删除第11行和第12行,当i system.out.println向量结果时,它将显示为[, , ]
,[, , ]
表示已删除的行。
public Vector getexcel(String filename)
{
String filetype = filename.substring(filename.lastIndexOf(".")+1);
Vector cellVectorHolder = new Vector();
try
{
Workbook workBook = WorkbookFactory.create(new FileInputStream(filename));
Sheet sheet = workBook.getSheetAt(0);
Iterator rowIter = sheet.rowIterator();
if(filetype.equals("xlsx"))
{
while(rowIter.hasNext())
{
XSSFRow row = (XSSFRow) rowIter.next();
Iterator cellIter = row.cellIterator();
Vector cellStoreVector=new Vector();
if(row.getRowNum()>1)
{
while(cellIter.hasNext())
{
XSSFCell cell = (XSSFCell) cellIter.next();
Integer cellType = cell.getCellType();
String cellTypeDesc = "";
String cellValue = "";
switch (cellType)
{
case 0:
cellTypeDesc = "NUMERIC";
String doubleValue = cell.getRawValue();
if (HSSFDateUtil.isCellDateFormatted(cell)) {
if (HSSFDateUtil.isValidExcelDate(Double.parseDouble(doubleValue))) {
Date date = HSSFDateUtil.getJavaDate(Double.parseDouble(doubleValue));
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
cellValue = df.format(date);
}
} else {
cellValue = String.valueOf(doubleValue);
}
break;
case 1:
cellTypeDesc = "STRING";
cellValue = cell.getStringCellValue();
break;
case 3:
cellTypeDesc = "BLANK";
cellValue = "";
break;
}
cellStoreVector.addElement(cellValue);
}
}
cellVectorHolder.addElement(cellStoreVector);
}
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
return cellVectorHolder;
}
答案 0 :(得分:0)
Excel存储空字段,因此您需要手动检查
您应该检查仅包含空单元格的行。只需在将其添加到cellStoreVector
此外,如果rowNumber
增加超过1,您可以自己添加空行向量。因此,请存储上一个rowNumber
并与当前rowNumber