Java 读取excel工作表时在迭代器处出错

Java 读取excel工作表时在迭代器处出错,java,Java,即使我已经进口了 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; 我在某些方面犯了错误 Iterator-cellIterator=row.cellIterator() 这是我的全部代码 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.

即使我已经进口了

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
我在某些方面犯了错误

Iterator-cellIterator=row.cellIterator()

这是我的全部代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
//import org.apache.poi.hssf.record.formula.functions.Cell;
//import org.apache.poi.hssf.record.formula.functions.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class UploadExcel {

    public static void main(String[] args) {
        try {
            FileInputStream file = new FileInputStream(new File("C:\\Documents and Settings\\admin\\Desktop\\imp data\\howtodoinjava_demo.xlsx"));

            //Create Workbook instance holding reference to .xlsx file
            XSSFWorkbook workbook = new XSSFWorkbook(file);

            //Get first/desired sheet from the workbook
            XSSFSheet sheet = workbook.getSheetAt(0);

            //Iterate through each rows one by one
            Iterator<Row> rowIterator = sheet.iterator();

            while (rowIterator.hasNext())
            {
                Row row = rowIterator.next();

                //For each row, iterate through all the columns
                Iterator<Cell> cellIterator=row.cellIterator();

                while (cellIterator.hasNext()) 
                {
                     Cell cell = cellIterator.next();

                     //Check the cell type and format accordingly
                     switch (cell.getCellType()) 
                     {
                         case Cell.CELL_TYPE_NUMERIC:
                         System.out.print(cell.getNumericCellValue() + "\t");
                         break;
                         case Cell.CELL_TYPE_STRING:
                         System.out.print(cell.getStringCellValue() + "\t");
                         break;
                     }
                 }

                 System.out.println("");
             }

             file.close();
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 }
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.util.Map;
导入java.util.Set;
导入java.util.TreeMap;
导入java.util.Iterator;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
//导入org.apache.poi.hssf.record.formula.functions.Cell;
//导入org.apache.poi.hssf.record.formula.functions.Row;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
公共类上载Excel{
公共静态void main(字符串[]args){
试一试{
FileInputStream文件=新的FileInputStream(新文件(“C:\\Documents and Settings\\admin\\Desktop\\imp data\\howtodoinjava\u demo.xlsx”);
//创建包含对.xlsx文件引用的工作簿实例
XSSF工作簿=新XSSF工作簿(文件);
//从工作簿中获取第一张/所需的工作表
XSSFSheet sheet=workbook.getSheetAt(0);
//逐个遍历每一行
迭代器rowIterator=sheet.Iterator();
while(roweiterator.hasNext())
{
行=行迭代器。下一步();
//对于每一行,遍历所有列
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext())
{
Cell=cellIterator.next();
//检查相应的单元格类型和格式
开关(cell.getCellType())
{
case Cell.Cell\u类型\u数值:
System.out.print(cell.getNumericCellValue()+“\t”);
打破
case Cell.Cell\u类型\u字符串:
System.out.print(cell.getStringCellValue()+“\t”);
打破
}
}
System.out.println(“”);
}
file.close();
}捕获(例外e){
e、 printStackTrace();
}
}
}
我得到的错误是:

Type mismatch: cannot convert from java.util.Iterator<org.apache.poi.ss.usermodel.Cell> to java.util.Iterator<org.apache.poi.hssf.record.formula.functions.Cell>
类型不匹配:无法从java.util.Iterator转换为java.util.Iterator

您能帮我解决这个问题吗。

您还需要xssf的依赖项:

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.16</version>
</dependency>

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.16</version>
</dependency>

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml-schemas</artifactId>
  <version>3.7</version>
</dependency>

org.apache.poi
poi ooxml
3.16
org.apache.poi
poi
3.16
org.apache.poi
poi ooxml模式
3.7

如果您现在没有收到编译错误,这意味着您在其他地方有这种依赖关系,很可能您的RiverBoat项目公开了一个旧的/不兼容的版本。因此,在这个pom中要么需要两个poi依赖项,要么不需要任何poi依赖项(因为这两个依赖项都可能被RiverBoat公开)。

这对我来说很有效,使用
poi-3.16.jar
poi-ooxml-schemas-3.16.jar
。你用的是什么版本?我用的是3.7。。我应该要所有3.16的罐子吗?