Java Apache poi“;编译错误:类型不匹配”;

Java Apache poi“;编译错误:类型不匹配”;,java,apache-poi,Java,Apache Poi,我在Struts 1.3.10项目中使用ApachePOI3.9。 在使用此功能编译时,我有两个错误: private boolean parserHSSFSheet(HSSFSheet pageAccord, StringBuffer idPaa, StringBuffer idGroupe, StringBuffer idFournisseur, StringBuffer idFamille, StringBuffer periode, Map<Integer,

我在Struts 1.3.10项目中使用ApachePOI3.9。 在使用此功能编译时,我有两个错误:

private boolean parserHSSFSheet(HSSFSheet pageAccord, StringBuffer idPaa, StringBuffer idGroupe,
            StringBuffer idFournisseur, StringBuffer idFamille, StringBuffer periode, Map<Integer, Marque> mapMarque,
            Map<Integer, Ristournable> mapRistournable, Map<Integer, PerimetreProduitEnum> mapTypeDeclaration,
            Map<Integer, FamilleDeProduitsNomenclature> mapFamille, Map<Integer, String> mapMarqueProduit,
            TreeMap<Integer, TreeMap<Integer, BigDecimal>> mapColonneAdherentMontant,
            TreeMap<Integer, BigDecimal> mapAdherentQuantite) throws Exception {

...   

for (Iterator<HSSFRow> rit = pageAccord.rowIterator(); rit.hasNext();) {
    HSSFRow row = (HSSFRow) rit.next();

    String typeCellule = "";

    for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>) row.cellIterator(); cit.hasNext();) {
        HSSFCell cell = cit.next();

        if (cell.getCellNum() == ((short) 0)) {

...

}
private boolean parserHSSFSheet(HSSFSheet pageAccord、StringBuffer idPaa、StringBuffer idGroupe、,
StringBuffer IDFornisseur、StringBuffer idFamille、StringBuffer periode、mapMarque、,
Map MaprisTourable,Map mapTypeDeclaration,
MapFamile地图,mapMarqueProduit地图,
树状地图,
TreeMap MapAttendentQuantite)引发异常{
...   
for(迭代器rit=pageAccord.rowIterator();rit.hasNext();){
HSSFRow行=(HSSFRow)rit.next();
字符串typeCellule=“”;
for(迭代器cit=(迭代器)row.cellIterator();cit.hasNext();){
HSSFCell单元=下一个单元();
if(cell.getCellNum()==((短)0)){
...
}
错误:

pageAccord.rowIterator();

类型不匹配:无法从迭代器转换为迭代器

(迭代器)row.cellIterator();

无法从迭代器强制转换为迭代器

你看过文档了吗?上面说,
roweiterator
返回
java.util.Iterator
,所以你不能将它“向前”强制转换。关于单元格等也是如此

改变

Iterator<HSSFRow> rit = pageAccord.rowIterator(); rit.hasNext();
Iterator rit=pageAccord.rowIterator();rit.hasNext();

Iterator rit=pageAccord.rowIterator();rit.hasNext();
并对
cellIterator执行相同的操作

如果迭代器确实会返回与
HSSFCell
兼容的类型,那么将
Cell
第二次转换为
HSSFCell
应该可以工作。你看过文档了吗?上面说
rowtiterator
返回
java.util.iterator
,所以你不能“向前”转换它。关于Cell等的情况也是如此

改变

Iterator<HSSFRow> rit = pageAccord.rowIterator(); rit.hasNext();
Iterator rit=pageAccord.rowIterator();rit.hasNext();

Iterator rit=pageAccord.rowIterator();rit.hasNext();
并对
cellIterator执行相同的操作


如果迭代器确实会根据调用的API文档返回与
HSSFCell
兼容的类型,则第二次将
Cell
转换为
HSSFCell
应该有效

  • pageAccord.rowIterator()
    返回
    java.util.Iterator
    。请参阅
  • row.cellIterator()
    返回
    java.util.Iterator
    。请参阅
Row
Cell
都只是接口,但我还是会尽可能地使用它们,并将显式向下转换推迟到实际需要(并且允许)的地方


因此:修改您的迭代器以符合上面列出的类型(这也可能意味着在某些地方使用泛型的
迭代器
),并且只在以后向下播放(例如在
HSSFRow行=(HSSFRow)rit.next();
)。

根据API文档调用

  • pageAccord.rowIterator()
    返回
    java.util.Iterator
    。请参阅
  • row.cellIterator()
    返回
    java.util.Iterator
    。请参阅
Row
Cell
都只是接口,但我还是会尽可能地使用它们,并将显式向下转换推迟到实际需要(并且允许)的地方


因此:修改您的迭代器以符合上面列出的类型(这也可能意味着在某些地方使用泛型的
迭代器
),并且只能在以后向下转换(例如在
HSSFRow行=(HSSFRow)rit.next();
)。

workbook = WorkbookFactory.create(new FileInputStream(envFilePath + "\\"+ listOfFiles[i].getName()));
                            // Get the first sheet.
                            Sheet sheet = workbook.getSheetAt(0);

                            // Get the first cell.
                            Row row = sheet.getRow(0);
                            Cell cell = row.getCell(0);
可以帮助您的测试程序

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class TestExcelFile {

    public static void main(String[] args) {
        String envFilePath = System.getenv("AZURE_FILE_PATH");

        // upload list of files/directory to blob storage
        File folder = new File(envFilePath);
        File[] listOfFiles = folder.listFiles();

        for (int i = 0; i < listOfFiles.length; i++) {
            if (listOfFiles[i].isFile()) {
                System.out.println("File " + listOfFiles[i].getName());

                Workbook workbook;
                try {
                        workbook = WorkbookFactory.create(new FileInputStream(envFilePath + "\\"+ listOfFiles[i].getName()));
                        // Get the first sheet.
                        Sheet sheet = workbook.getSheetAt(0);

                        // Get the first cell.
                        Row row = sheet.getRow(0);
                        Cell cell = row.getCell(0);

                        // Show what is being read.
                        System.out.println(cell.toString());
                        for (Cell cell1 : row) {
                            System.out.println(cell1.toString());
                        }
                } catch (InvalidFormatException | IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入org.apache.poi.openxml4j.exceptions.InvalidFormatException;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
公共类TestExcelFile{
公共静态void main(字符串[]args){
字符串envFilePath=System.getenv(“AZURE_文件_路径”);
//将文件/目录列表上载到blob存储
文件文件夹=新文件(envFilePath);
File[]listOfFiles=folder.listFiles();
for(int i=0;i
请找到下面的快速解决方案程序

workbook = WorkbookFactory.create(new FileInputStream(envFilePath + "\\"+ listOfFiles[i].getName()));
                            // Get the first sheet.
                            Sheet sheet = workbook.getSheetAt(0);

                            // Get the first cell.
                            Row row = sheet.getRow(0);
                            Cell cell = row.getCell(0);
可以帮助您的测试程序

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class TestExcelFile {

    public static void main(String[] args) {
        String envFilePath = System.getenv("AZURE_FILE_PATH");

        // upload list of files/directory to blob storage
        File folder = new File(envFilePath);
        File[] listOfFiles = folder.listFiles();

        for (int i = 0; i < listOfFiles.length; i++) {
            if (listOfFiles[i].isFile()) {
                System.out.println("File " + listOfFiles[i].getName());

                Workbook workbook;
                try {
                        workbook = WorkbookFactory.create(new FileInputStream(envFilePath + "\\"+ listOfFiles[i].getName()));
                        // Get the first sheet.
                        Sheet sheet = workbook.getSheetAt(0);

                        // Get the first cell.
                        Row row = sheet.getRow(0);
                        Cell cell = row.getCell(0);

                        // Show what is being read.
                        System.out.println(cell.toString());
                        for (Cell cell1 : row) {
                            System.out.println(cell1.toString());
                        }
                } catch (InvalidFormatException | IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入org.apache.poi.openxml4j.exceptions.InvalidFormatException;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
公共类TestExcelFile{