首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache-poi“编译错误:类型错配”

Apache-poi“编译错误:类型错配”
EN

Stack Overflow用户
提问于 2016-01-20 13:48:40
回答 3查看 5.5K关注 0票数 0

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

代码语言:javascript
复制
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)) {

...

}

错误:

pageAccord.rowIterator();

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

(Iterator<HSSFCell>) row.cellIterator();

不能从迭代器转换为迭代器

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-20 14:04:36

您见过这些文档吗??https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFSheet.htmlrowIterator返回java.util.Iterator<Row>,所以不能“继续”转换。在细胞等方面也是如此。

变化

代码语言:javascript
复制
Iterator<HSSFRow> rit = pageAccord.rowIterator(); rit.hasNext();

代码语言:javascript
复制
Iterator<Row> rit = pageAccord.rowIterator(); rit.hasNext();

并对cellIterator做同样的操作

第二,如果迭代器确实将返回与Cell兼容的类型,则将HSSFCell转换为HSSFCell

票数 2
EN

Stack Overflow用户

发布于 2016-01-20 14:13:34

根据API文档,调用

  • pageAccord.rowIterator()返回一个java.util.Iterator<Row>。见这里
  • row.cellIterator()返回一个java.util.Iterator<Cell>。见这里

RowCell都只是接口。不过,如果可能的话,我还是会与这些人一起工作,并将显式的下拉式转换推迟到实际需要(并且允许)的地方。

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

票数 2
EN

Stack Overflow用户

发布于 2017-03-21 10:57:16

请查找下面的快速解决方案程序

代码语言:javascript
复制
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);

测试程序,它可以帮助您

代码语言:javascript
复制
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();
                }
            }
        }
    }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34901837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档