如何读取 excel 文件并将其放入数组?

How do I read an excel file and put it into an array?

所以我正在做一个学校项目,我必须将 excel 文件读入数组,然后使用该数据并操作并向用户提供答案。我什至不知道如何将文件设置为等于数组,然后从那里获取特定的数据位。任何帮助,将不胜感激。下面是真题提示:

设计一个 Java 应用程序来读取包含与美国相关的数据的文件。 1994-2013 年的犯罪统计数据。该文件的描述如下所示。应用程序 应提供数据的统计结果。 使用数组和 Java 类 来存储数据。 (提示:你可以而且应该创建一个 USCrimeClass 来存储字段。您还可以拥有一组美国犯罪对象。)

我从官方网站复制了这个并添加了一些 TODO 行作为你的指南。您将按照此大纲找到解决方案。我没有给出确切的答案,因为这是你的任务。

一个 Excel 行 == USCrimeClass 对象

您必须创建一个映射到行 class 的 class。 class 应该命名为 USCrimeClass。

USCrimeClass

USCrimeClass 应具有映射到行中单元格的字段。

示例:

从 1994-2013

Official Reference

获取单元格内容 要获取单元格的内容,您首先需要知道它是什么类型的单元格(例如,向字符串单元格询问其数字内容将得到 NumberFormatException)。因此,您需要打开单元格的类型,然后为该单元格调用适当的 getter。

在下面的代码中,我们遍历一个 sheet 中的每个单元格,打印出单元格的引用(例如 A3),然后是单元格的内容。

// import org.apache.poi.ss.usermodel.*;

DataFormatter formatter = new DataFormatter();
Sheet sheet1 = wb.getSheetAt(0);

//TODO int numberOfRows=getNumberOf Rows from sheet1;
//TODO USCrimeClass[] arrayOfUSCrimeClass =new USCrimeClass [numberOfRows](); 

for (Row row : sheet1) {

     //TODO create new object of USCrimeClass
     //TODO USCrimeClass objectUSCrimeClass=new USCrimeClass();
    for (Cell cell : row) {
        CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
        System.out.print(cellRef.formatAsString());
        System.out.print(" - ");

        // get the text that appears in the cell by getting the cell value and applying any data formats (Date, 0.00, 1.23e9, .23, etc)
        String text = formatter.formatCellValue(cell);
        System.out.println(text);

        // Alternatively, get the value and format it yourself
        switch (cell.getCellTypeEnum()) {
            case CellType.STRING:
                System.out.println(cell.getRichStringCellValue().getString());
                //TODO set values to feild from excel cell objectUSCrimeClass.setFrom(cell.getRichStringCellValue().getString());
                break;
            case CellType.NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    System.out.println(cell.getDateCellValue());
                } else {
                    System.out.println(cell.getNumericCellValue());
                }
                break;
            case CellType.BOOLEAN:
                System.out.println(cell.getBooleanCellValue());
                break;
            case CellType.FORMULA:
                System.out.println(cell.getCellFormula());
                break;
            case CellType.BLANK:
                System.out.println();
                break;
            default:
                System.out.println();
        }
    }

//TODO add row object to array or list  arrayOfUSCrimeClass[i]=objectUSCrimeClass;
}

文本提取

对于大多数文本提取要求,标准 ExcelExtractor class 应该可以满足您的所有需求。

InputStream inp = new FileInputStream("workbook.xls");
HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
ExcelExtractor extractor = new ExcelExtractor(wb);

extractor.setFormulasNotResults(true);
extractor.setIncludeSheetNames(false);
String text = extractor.getText();

https://poi.apache.org/spreadsheet/examples.html

https://poi.apache.org/spreadsheet/quick-guide.html#Iterator