使用API将Excel列转换为Java
我必须创build一个计算GPA的程序,使用读取xlsx excel文件的apache poi。 它压缩了220行和4列,如
Course Number Course Name Credit Hours Course Multipler 110 Eng 1 CP 5.0 1.0
还有220个其他课程。 不过,我能够使用cell.getStringCellValue和cell.getNumericCellValue打印这些数据,但是我无法将这些打印数据存入每个数组中。
我想要创build一个名为courseNumList的数组,并将courseNumList [0]放在第一个课程编号,第二个课程编号在courseNumList [1] ..中。
我想创build4个数组,但是什么是一个好方法?
private static ArrayList<Object> c = new ArrayList <Object>(); public static void readXLSXFile() throws IOException { InputStream ExcelFileToRead = new FileInputStream("C:/Users/14KimTa/Desktop/Downloads/Course_List.xlsx"); XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead); XSSFWorkbook test = new XSSFWorkbook(); XSSFSheet sheet = wb.getSheetAt(0); XSSFRow row; XSSFCell cell; Iterator rows = sheet.rowIterator(); while (rows.hasNext()) { row=(XSSFRow) rows.next(); Iterator cells = row.cellIterator(); while (cells.hasNext()) { cell=(XSSFCell) cells.next(); if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) { System.out.print(cell.getStringCellValue()+" "); c.add(getStringCellValue()); } else if(cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { System.out.print(cell.getNumericCellValue()+" "); } } System.out.println(); } }
这是我的代码到目前为止。
我试图创build每个列到数组中,但它根本不工作。
谢谢!
我将创build一个新的类来定义您的数据, Course
,为每个列(4个字段)提供一个字段。 然后,我会创build一些List
( ArrayList<Course>
看起来不错)来保存所有Courses
。 一系列的Course
也可以工作,因为你知道从一开始就有多less人。 在循环中,我将为每一行创build一个Course
对象,根据cell.getStringCellValue()
和cell.getNumericCellValue()
的值设置字段,在处理每一行后将该Course
添加到List
(或数组)。
我不认为每列创build一个数组是一个好主意。 通过遵循4个数组中的相同索引来跟踪同一行中的数据可能是麻烦且不好的做法。
我宁愿创build一个Java类 – Course
– 有4个字段 – courseNumber
, courseName
, creditHours
和courseMultiplier
。 然后,我将创build一个这样的对象的集合,例如Collection<Course> courses = new ArrayList<Course>();
,并根据从Excel中读取的数据填充它 – 每行一个对象。
编辑:
我build议你创build一个自定义types,而不是使用您的ArrayList
types参数的Object
。 通过使用Object
你没有太多的Object
。
然后,对于每一行,你会做以下几点:
//...obtain your values from cells and populate `courseNumber`, `courseName`,`creditHours` and `courseMultiplier` accordingly Course course = new Course(); course.setCourseNumber(courseNumber); course.setCourseName(courseName); course.setCreditHours(creditHours); course.setCourseMultiplier(courseMultiplier); c.add(course);
这段代码应该被放置在循环遍历的循环中。