我需要一些使用jxls阅读器的帮助(http://jxls.sourceforge.net/reference/reader.html).
我对循环一行表示特定java对象的工作表很满意,但在嵌套循环的情况下,我被难倒了。
我需要将上述excel表映射到以下pojo:
class Student {
private String name;
private String dob;
private List<Class> class;
//getters & setters
}
class Class {
private String name;
private String link;
//getters & setters
}
我的问题是定义lookbreakcondition来读取内部对象。请注意,类对象的loopbreakcondition需要以下内容:
如何在loopbreakcondition中表示上述布尔条件。我有以下几点,但我知道这是错误的:
<workbook>
<worksheet name="Students">
<section startRow="0" endRow="0">
<!--Empty Header Section-->
</section>
<loop startRow="1" endRow="1" items="students" var="student" varType="com.test.Student">
<section startRow="1" endRow="1">
<mapping row="1" col="0">student.name</mapping>
<mapping row="1" col="1">student.dob</mapping>
</section>
<loopbreakcondition>
<rowcheck offset="0">
<cellcheck offset="0"> <!--Breaks on next empty cell--></cellcheck>
</rowcheck>
</loopbreakcondition>
<loop startRow="1" endRow="1" items="student.class" var="class" varType="com.test.Class">
<section startRow="1" endRow="1">
<mapping row="1" col="2">class.name</mapping>
<mapping row="1" col="3">class.link</mapping>
</section>
<loopbreakcondition>
<rowcheck offset="0">
<cellcheck offset="0"> </cellcheck>
</rowcheck>
</loopbreakcondition>
</loop>
</loop>
</worksheet>
</workbook>
这可能吗?有没有其他库可以帮助我实现这一点?还是我最好使用ApachePOI编写自己的解析器?
非常感谢。
您可以使用apachepoi for read excel(xls或xlsx(XSSF))文件。有关更多信息,请参阅apache poi文档、apache poi-HSSF与poi-XSSF。在下面的示例中,将类的类名更改为StudentClass。因为类在java中是一个关键字
尝试以下解决方案,
Studnet.java
public class Student {
private String name;
private Date dob; //as per given excel file, dob is a date format
private ArrayList<StudentClass> studentClassList;
//getters & setters
}
StudentClass.java
public class StudentClass {
private String name;
private String link;
//getters & setters
}
ExcelFileReader.java
public class ExcelFileReader() {
private String studentName; //for store the previous student name
private List<Student> listStudent; //for collect the students
public void readData() {
listStudent = new ArrayList<Student>();
studentName = "";
FileInputStream excelFile = new FileInputStream(new File(INPUT_EXCEL_FILE_NAME));
Workbook workbook = new XSSFWorkbook(excelFile); //create the workbook using input excel file
Sheet sheet = workbook.getSheetAt(0); //get the first sheet of excel file
int rowCount = sheet.getPhysicalNumberOfRows(); //get the row count
for(int i = 1; i < rowCount; i++) { //i initialized with 1 for exclude the first row(first row id is 0 and it hold the column names)
if(rowCount>1){ //ignore the first row. because at this time no any student created
listStudent.add(student); //add student into student list
//you can use the created student in here as per your requirement
}
Row currentRow = sheet.getRow(i); //get current row
if(!studentName.equals(currentRow.getCell(0).getStringCellValue())){ //if not equals current student name with previous student name then create new student entry
Student student = new Student();
student.setName(currentRow.getCell(0).getStringCellValue()); //first cell id is 0
studnet.setDob(currentRow.getCell(1).getDateCellValue()); //second cell id is 1
studentName = student.getName(); //assign the current student name to studentName variable for future validation
if(!currentRow.getCell(2).getStringCellValue().equals(null) && !currentRow.getCell(2).getStringCellValue().equals("")){ //check the student has a class at same row(first row with new student entry)
StudentClass studentClass = new StudentClass();
studentClass.setName(currentRow.getCell(2).getStringCellValue()); //third cell id is 2
studentClass.setLink(currentRow.getCell(3).getStringCellValue());
student.getStudentClassList.add(studentClass); //add relevant StudnetClass into StudentClassList of Student. please initialized the StudentClassList in StudentClass
}
}else{ //this code block execute when student has more than one class
StudentClass studentClass = new StudentClass();
studentClass.setName(currentRow.getCell(2).getStringCellValue());
studentClass.setLink(currentRow.getCell(3).getStringCellValue());
student.getStudentClassList.add(studentClass);
}
}
}
}
什么是 Nutz.Dao 中的复杂SQL条件 对于 Nutz.Dao 来说,它本质上就是将你的 Java 对象转化成 SQL,然后交给 JDBC 去执行。 而 SQL 中,当执行数据删除和查询操作时,最常用的就是 WHERE 关键字。 WHERE 关键字后面的就是所谓的复杂查询条件 Nutz.Dao 将如何如何使用这个条件 Dao 接口的 clear 方法和 query 方法的第二个参数,就是为了
复杂的表达式 当你有一个复杂的 if 子句的时候,你应该把它们提取出来赋给一个 BOOL 变量,这样可以让逻辑更清楚,而且让每个子句的意义体现出来。 BOOL nameContainsSwift = [sessionName containsString:@"Swift"]; BOOL isCurrentYear = [sessionDateCompontents year] == 2
例如,我有简单的DF: 我是否可以使用熊猫的方法和习惯用法,从“A”中选择“B”对应值大于50的值,以及“C”对应值不等于900的值?
我正在探索动态编程设计方法如何与问题的潜在组合属性相关联。 为此,我正在研究硬币兑换问题的典型实例:让和
我试图使用和实现以下缓存逻辑: 如果过期时间已经过去,条件(需要计算和I/O)被评估为TRUE,然后强制获取数据并更新缓存。 如果过期时间已经过去,条件(需要计算和I/O)被计算为FALSE,那么不要使缓存数据无效,并从缓存中检索值。 如果过期时间未过,则从缓存中检索该值。 我按照这个指南工作:https://www.baeldung.com/spring-boot-caffeine-cache