如何读取 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
获取单元格内容
要获取单元格的内容,您首先需要知道它是什么类型的单元格(例如,向字符串单元格询问其数字内容将得到 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
所以我正在做一个学校项目,我必须将 excel 文件读入数组,然后使用该数据并操作并向用户提供答案。我什至不知道如何将文件设置为等于数组,然后从那里获取特定的数据位。任何帮助,将不胜感激。下面是真题提示:
设计一个 Java 应用程序来读取包含与美国相关的数据的文件。 1994-2013 年的犯罪统计数据。该文件的描述如下所示。应用程序 应提供数据的统计结果。 使用数组和 Java 类 来存储数据。 (提示:你可以而且应该创建一个 USCrimeClass 来存储字段。您还可以拥有一组美国犯罪对象。)
我从官方网站复制了这个并添加了一些 TODO 行作为你的指南。您将按照此大纲找到解决方案。我没有给出确切的答案,因为这是你的任务。
一个 Excel 行 == USCrimeClass 对象
您必须创建一个映射到行 class 的 class。 class 应该命名为 USCrimeClass。
USCrimeClass
USCrimeClass 应具有映射到行中单元格的字段。
示例:
从 1994-2013
获取单元格内容 要获取单元格的内容,您首先需要知道它是什么类型的单元格(例如,向字符串单元格询问其数字内容将得到 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