java中使用jxl導出excel時,需指定WritableSheet對象中對應於每個單元格的數據。List類型是一種常用的數據類型,它里面的元素是實體對象,當將它創建為WritableSheet對象時,它的每個實體元素可以通過簡單索引循環的形式遍歷到,但對實體每個屬性的遍歷,卻不能以簡單索引循環的形式實現,而只能用getter方法去逐一獲取,這樣,對不同的實體,均需特定的實現代碼與之對應,勢必會造成大量的代碼冗余。
一種有效的策略是,將List轉化為jsonArray,把實體對象的屬性名構造為一個字符串數組,那么,只需使用該數組的索引,對每個json對象循環訪問它的字符串形式的鍵,便可完成對屬性值的遍歷。
示例:
實體類Student
public class Student {
private String name;
private String gender;
private int age;
public Student(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
JsonArray導出為Exclel
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class JSONArrayToExcel {
public static void main(String[] args) {
Student student1 = new Student("張三","男",18);
Student student2 = new Student("李四","男",19);
Student student3 = new Student("小花","女",20);
//實體List
List<Student> studentList = new ArrayList<>();
studentList.add(student1);
studentList.add(student2);
studentList.add(student3);
//List轉為JSONArray
JSONArray jsonArray = JSONArray.fromObject(studentList);
//實體屬性名稱數組
Field[] fields = null;
try {
Class clazz = Class.forName("Student");
fields = clazz.getDeclaredFields();
}catch (Exception e){
e.printStackTrace();
}
if (fields != null){
String fileName = "jsonarrayToExcelTest.xls"; //文件名
File myFile = new File("./"+fileName);
try {
WritableWorkbook writableWorkbook = Workbook.createWorkbook(myFile); //定義工作簿對象
WritableSheet writableSheet = writableWorkbook.createSheet("sheet1",0); //定義sheet對象
for (int i = 0; i < fields.length; i++) { //加入表頭單元格內容
writableSheet.addCell(new Label(i,0,fields[i].getName()));
}
for (int i = 0; i < jsonArray.size(); i++) { //加入數據單元格內容
JSONObject json = jsonArray.getJSONObject(i);
for (int j = 0; j < fields.length; j++) {
writableSheet.addCell(new Label(j,i+1,json.get(fields[j].getName()).toString()));
}
}
writableWorkbook.write();
writableWorkbook.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
參考:
- https://blog.csdn.net/Albert201605/article/details/120331212
- https://blog.csdn.net/WangKun_0612/article/details/83618094
- https://blog.csdn.net/qqllife/article/details/77237969?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-10.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-10.highlightwordscore