Программисты JAVA общаются здесь
Anonymous
Цикл по членам класса и запись в Excel Apache POI
Сообщение
Anonymous » 15 окт 2024, 01:35
У меня есть список массивов пользовательских объектов. Я пытаюсь зациклить эти объекты, чтобы записать результат в файл Excel.
В приведенном ниже коде в первом цикле я устанавливаю строку заголовка в файле Excel, перебирая переменные-члены класса. Во втором цикле я записываю значения объекта.
Мой код:
Код: Выделить всё
class ChecklistOutput {
//Instantiating class data members
String a, b, c;
public ChecklistOutput() {
a = ""; b = ""; c = ""; }
}
private static ArrayList MasterOutput = new ArrayList();
private static void writeToMasterExcel() {
ChecklistOutput obj1 = new ChecklistOutput();
obj1.a = "AA"; obj1.b = "BB"; obj1.c = "CC";
ChecklistOutput obj1 = new ChecklistOutput();
obj2.a = "AA"; obj2.b = "BB"; obj2.c = "CC";
ChecklistOutput obj1 = new ChecklistOutput();
obj3.a = "AA"; obj3.b = "BB"; obj3.c = "CC";
ChecklistOutput obj1 = new ChecklistOutput();
obj4.a = "AA"; obj4.b = "BB"; obj4.c = "CC";
MasterOutput.add(obj1);
MasterOutput.add(obj2);
MasterOutput.add(obj3);
MasterOutput.add(obj4);
System.out.println(MasterOutput.size());
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = null;
HSSFRow row = null;
HSSFCell cell = null;
int rownum = 0, cellnum = 0;
sheet = workbook.createSheet("Master Spreadsheet");
row = sheet.createRow(rownum);
System.out.println("rownum " + rownum);
Class c = new ChecklistOutput().getClass();
Field[] fields = c.getDeclaredFields();
// First loop
for (Field field : fields) {
cell = row.createCell(cellnum);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(field.getName());
cellnum += 1;
}
System.out.println(MasterOutput.size());
// Second loop
for (ChecklistOutput x : MasterOutput) {
// This prints 4 times meaning that there are 4 values in
// MasterOutput
System.out.println("Hell");
rownum += 1;
cellnum = 0;
row = sheet.createRow(rownum);
for (Field field : fields) {
cell = row.createCell(cellnum);
cell.setCellType(Cell.CELL_TYPE_STRING);
try {
// I can see values here
System.out.println(field.get(x).toString());
cell.setCellValue(field.get(x).toString());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
cellnum += 1;
}
}
BufferedOutputStream bos;
try {
bos = new BufferedOutputStream(new FileOutputStream(
"C:\\Users\\ABC\\Documents\\Checklist-Output.xls",
true));
workbook.write(bos);
bos.close();
workbook.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Однако я получаю только значения заголовков в своем файле Excel.
Выход:
Может ли кто-нибудь мне в этом помочь? Спасибо!
Подробнее здесь:
https://stackoverflow.com/questions/303 ... apache-poi
1728945319
Anonymous
У меня есть список массивов пользовательских объектов. Я пытаюсь зациклить эти объекты, чтобы записать результат в файл Excel. В приведенном ниже коде в первом цикле я устанавливаю строку заголовка в файле Excel, перебирая переменные-члены класса. Во втором цикле я записываю значения объекта. Мой код: [code]class ChecklistOutput { //Instantiating class data members String a, b, c; public ChecklistOutput() { a = ""; b = ""; c = ""; } } private static ArrayList MasterOutput = new ArrayList(); private static void writeToMasterExcel() { ChecklistOutput obj1 = new ChecklistOutput(); obj1.a = "AA"; obj1.b = "BB"; obj1.c = "CC"; ChecklistOutput obj1 = new ChecklistOutput(); obj2.a = "AA"; obj2.b = "BB"; obj2.c = "CC"; ChecklistOutput obj1 = new ChecklistOutput(); obj3.a = "AA"; obj3.b = "BB"; obj3.c = "CC"; ChecklistOutput obj1 = new ChecklistOutput(); obj4.a = "AA"; obj4.b = "BB"; obj4.c = "CC"; MasterOutput.add(obj1); MasterOutput.add(obj2); MasterOutput.add(obj3); MasterOutput.add(obj4); System.out.println(MasterOutput.size()); HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = null; HSSFRow row = null; HSSFCell cell = null; int rownum = 0, cellnum = 0; sheet = workbook.createSheet("Master Spreadsheet"); row = sheet.createRow(rownum); System.out.println("rownum " + rownum); Class c = new ChecklistOutput().getClass(); Field[] fields = c.getDeclaredFields(); // First loop for (Field field : fields) { cell = row.createCell(cellnum); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellValue(field.getName()); cellnum += 1; } System.out.println(MasterOutput.size()); // Second loop for (ChecklistOutput x : MasterOutput) { // This prints 4 times meaning that there are 4 values in // MasterOutput System.out.println("Hell"); rownum += 1; cellnum = 0; row = sheet.createRow(rownum); for (Field field : fields) { cell = row.createCell(cellnum); cell.setCellType(Cell.CELL_TYPE_STRING); try { // I can see values here System.out.println(field.get(x).toString()); cell.setCellValue(field.get(x).toString()); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } cellnum += 1; } } BufferedOutputStream bos; try { bos = new BufferedOutputStream(new FileOutputStream( "C:\\Users\\ABC\\Documents\\Checklist-Output.xls", true)); workbook.write(bos); bos.close(); workbook.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } [/code] Однако я получаю только значения заголовков в своем файле Excel. Выход: [code]| a | b | c | [/code] Может ли кто-нибудь мне в этом помочь? Спасибо! Подробнее здесь: [url]https://stackoverflow.com/questions/30368416/loop-on-class-members-and-write-to-excel-apache-poi[/url]