Я все еще работаю над своей программой чтения файлов, но у меня есть некоторые проблемы с моим кодом. Класс 'рейтинг файлов' будет читать все файлы в каталоге и давать им оценку. Все значения даны моему «классу sheetWriter», который вы можете увидеть здесь. Класс получает правильные значения, если я печатаю obj (объекты), но запись их в excel не работает должным образом -> он будет записывать только две строки: строка 1 («Достижимая для пользователя», «Рейтинг»,«Путь к файлу» и т. Д.) И строка 2: (достижимо, 45, C: // blabla и т. Д.). Таким образом, он в основном записывает только один файл в xlsx. Как я могу заставить его работать так, чтобы он записывал все файлы в xlsx?
Спасибо! (Я новичок на Java)
public class SheetWriter {
private XSSFWorkbook workbook;
private XSSFSheet sheet;
//!! Maybe important to know: the values come from a for-loop
//from another class 'file rating': For (x : sourcefiles){ points=5 setPoints(points) }
public void SheetWriter(String file,String reachable, int points,String filePath,String fileName,String keywordMatch,String grootte,
String resolutie, String crea_date,String crea_mod,String last_acc, String authorString,String datetakenString,
String manufactString,String modelString,String gps ) {
workbook = new XSSFWorkbook();
sheet = workbook.createSheet("Rating Files");
Map<String, Object[]> data = new TreeMap<String, Object[]>();
data.put("1", new Object[]{"Reachable for user", "Rating", "File path","File name","Keyword","Size","Dimensions","Date_crea","Date_mod","Date_last_access",
"Author","Date taken","Camera maker","Camera model","GPS-data"});
data.put(file, new Object[]{reachable, points,filePath,fileName,keywordMatch,grootte, resolutie, crea_date,crea_mod,last_acc,
authorString,datetakenString,manufactString,modelString,gps});
Set<String> keyset = data.keySet();
int rownum = 0;
for (String key : keyset) {
// this creates a new row in the sheet
Row row = sheet.createRow(rownum++);
Object[] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr) {
// this line creates a cell in the next column of that row
Cell cell = row.createCell(cellnum++);
//System.out.println(obj);
if (obj instanceof String)
cell.setCellValue((String)obj);
else if (obj instanceof Integer)
cell.setCellValue((Integer)obj);
}
} //!! so here it's still OK. I can print all the obj (objects)
try {
sheet.autoSizeColumn(0);sheet.autoSizeColumn(1);sheet.autoSizeColumn(2);sheet.autoSizeColumn(3);
sheet.autoSizeColumn(4);sheet.autoSizeColumn(5);sheet.autoSizeColumn(6);sheet.autoSizeColumn(7);
sheet.autoSizeColumn(8);sheet.autoSizeColumn(9);sheet.autoSizeColumn(10);sheet.autoSizeColumn(11);
sheet.autoSizeColumn(12);sheet.autoSizeColumn(13);sheet.autoSizeColumn(14);
FileOutputStream out = new FileOutputStream(new File("C:/Users/user/Pictures/test.xlsx"));
workbook.write(out); //!! Only writes one file to xlsx
out.close();
workbook.close();
System.out.println("test.xlsx is finished.");
}
catch (Exception e) {
e.printStackTrace();
}