当前位置: 首页 > 知识库问答 >
问题:

无法获取Apache POI以使我的Excel读取正常工作

东郭赞
2023-03-14

我正在尝试使用这个基本布局的程序,可以读取Excel文件。我想扩展到此代码之外的内容,但由于某些原因,每次构建代码时,我都会遇到一个错误“注意:C:\Users\Ryan Kabir\Documents\NetBeansProjects\ExcelReader\src\ExcelReader\ExcelReader.java使用或覆盖不推荐使用的API。注意:使用-Xlint重新编译:不推荐使用以获取详细信息。”我试着用javac-Xlint:deprecationExcelReader编译。java,但我无法找出哪种方法被弃用。对不对,我的测试excel文件只是一个3x6表。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
 
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.xssf.usermodel.XSSFWorkbook;
 
/**
 * A dirty simple program that reads an Excel file.
 * @author www.codejava.net
 *
 */
public class ExcelReader {
     
    public static void main(String[] args) throws IOException {
        String excelFilePath = "Books.xlsx";
        FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
         
        Workbook workbook = new XSSFWorkbook(inputStream);
        Sheet firstSheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = firstSheet.iterator();
         
        while (iterator.hasNext()) {
            Row nextRow = iterator.next();
            Iterator<Cell> cellIterator = nextRow.cellIterator();
             
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                 
                switch (cell.getCellType()) {
                    case Cell.CELL_TYPE_STRING:
                        System.out.print(cell.getStringCellValue());
                        break;
                    case Cell.CELL_TYPE_BOOLEAN:
                        System.out.print(cell.getBooleanCellValue());
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        System.out.print(cell.getNumericCellValue());
                        break;
                }
                System.out.print(" - ");
            }
            System.out.println();
        }
         
        workbook.close();
        inputStream.close();
    }

}

共有1个答案

傅皓君
2023-03-14

不建议使用Cell.getCellType以及Cell中的所有字段。使用Cell.getCellTypeEnum和CellType,如获取单元格内容中所示。

它需要稍微改变一下,因为

error: an enum switch case label must be the unqualified name of an enumeration constant
     case CellType.STRING:

但以下措施应该奏效:

import org.apache.poi.ss.usermodel.CellType;
...
            switch (cell.getCellTypeEnum()) { //up to apache poi version 3.17
            //switch (cell.getCellType()) { //using apache poi version 4.0.0 upwards

                case STRING:
                    System.out.println(cell.getRichStringCellValue().getString());
                    break;
                case NUMERIC:
                    if (DateUtil.isCellDateFormatted(cell)) {
                        System.out.println(cell.getDateCellValue());
                    } else {
                        System.out.println(cell.getNumericCellValue());
                    }
                    break;
                case BOOLEAN:
                    System.out.println(cell.getBooleanCellValue());
                    break;
                case FORMULA:
                    System.out.println(cell.getCellFormula());
                    break;
                case BLANK:
                    System.out.println();
                    break;
                default:
                    System.out.println();
            }
...

阅读《忙碌的开发人员指南》中的HSSF和XSSF功能总是一件好事。

现在从apache poiversion4.0.0向上Cell.getCellType返回CellType。所以使用这些版本,我们现在需要使用这种方法。

 类似资料:
  • 问题内容: 尝试使用ApachePOI打开Excel时,我得到 我检查了。没有创建这样的文件夹。我正在使用Apache POI 3.6版。 有什么帮助吗?类似的代码在其他工作区中运行良好。在这里不知所措。 码: 问题答案: 您为什么要制作一个非常好的文件,将其包装在中,然后要求POI必须为您缓冲整个文件,以便可以进行随机访问?如果直接将文件直接传递给POI,生活会好很多,因此可以根据需要跳过它!

  • 似乎这里和这里已经有了答案,但是,这些解决方案都不适合我。 我正在努力 不管怎样,最后仍然包含第一张而不是第二张。我使用的是Python 3和Pandas 0.20。1(水蟒发行版)。我错过了什么?如何将第二张图纸加载到?

  • 我正在获取O并且从未进行成功的Hibernate连接测试,在学习了本教程“JasperReports with hibernate-module1”和JasperReports with hibernate-module2之后,弹出一个错误,说“Could not parse mapping document from resource com/report/mappings/department

  • 嗨,我想在第一行搜索一个字符串,如果找到了,我想移动那一列。

  • 请在下面找到代码片段 当我们创建excel文件时,这意味着我们正在创建工作簿。从那里,我们访问表格,然后是行和列。 我不明白为什么我们写写当我们已经有一个'Workbook'我们应该有一些方法来获取我们已经创建的工作簿,就像我们为行(getRow),工作表(getSheet),细胞(getcell)所做的那样。 你能帮我理解POI吗?