2013-07-01 49 views
-1

下面的代码是读取一个大的Excel文件。我得到了“无法从org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch的数字单元格中获取文本值”错误。我该如何解决。列1是数值,列2是字符串值。阅读Excel行和列

import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
    import org.apache.poi.hssf.usermodel.HSSFSheet; 
    import org.apache.poi.hssf.usermodel.HSSFRow; 
    import org.apache.poi.hssf.usermodel.HSSFCell; 
    import java.io.FileInputStream; 
    import java.io.IOException; 
    import java.util.Iterator; 
    import java.util.Vector; 

    public class ReadExcel { 

     public static void main(String[] args) throws Exception { 

      String filename = "C:/Documents and Settings/oemiola/My Documents/Defects_Input.xls"; 
      FileInputStream fis = null; 

      try { 
       fis = new FileInputStream(filename); 
       HSSFWorkbook workbook = new HSSFWorkbook(fis); 
       HSSFSheet sheet = workbook.getSheetAt(0); 
       Iterator rowIter = sheet.rowIterator();  

       while(rowIter.hasNext()){ 
        HSSFRow myRow = (HSSFRow) rowIter.next(); 
        Iterator cellIter = myRow.cellIterator(); 
        Vector<String> cellStoreVector=new Vector<String>(); 
        while(cellIter.hasNext()){ 
         HSSFCell myCell = (HSSFCell) cellIter.next(); 
         String cellvalue = myCell.getStringCellValue(); 
         cellStoreVector.addElement(cellvalue); 
        } 
        String firstcolumnValue = null; 
        String secondcolumnValue = null; 

        int i = 0; 
        firstcolumnValue = cellStoreVector.get(i).toString();  
        secondcolumnValue = cellStoreVector.get(i+1).toString(); 

        insertQuery(firstcolumnValue,secondcolumnValue); 
       } 

      } catch (IOException e) { 

       e.printStackTrace(); 

      } finally { 

       if (fis != null) { 

        fis.close(); 
       } 
      } 

     } 

     private static void insertQuery(String firstcolumnvalue,String secondcolumnvalue) { 

      System.out.println(firstcolumnvalue + " " +secondcolumnvalue); 


     } 

    } 
+0

我会说...不要尝试读取数字单元格作为字符串。也许使用'getNumericCellValue()'... –

+0

你也可以发布错误的日志? – yams

+0

错误是:线程“main”中的异常java.lang.IllegalStateException:无法从数字单元中获取文本值 \t at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:643) \t在org.apache.poi.hssf.usermodel.HSSFCell.getRichStringCellValue(HSSFCell.java:720) \t在org.apache.poi.hssf.usermodel.HSSFCell.getStringCellValue(HSSFCell.java:703) \t在READEXCEL。主(ReadExcel.java:34) – user2539273

回答

0

使用Cell#getCellType来确定单元格中是否有数字或字符串。如果是数字,则使用getNumericCellValue而不是getStringCellValue