Я использую этот код, чтобы добавить строку в конце листа Excel. Каждый раз, когда вызывается функция. Где last=0
при инициализации.
connectionTime, mobility, angleofArrival, sender and peer
- это некоторые переменные, значения которых изменяются при вызове функции. и есть значение, которое я хочу сохранить в каждой строке при вызове функции.
public void excelWriter(DTNHost sender, DTNHost peer){
String fileName = "Results.xls";
try {
File file = new File(fileName);
FileInputStream fin = null;
HSSFWorkbook workbook = null;
HSSFSheet worksheet = null;
FileOutputStream fout = null;
POIFSFileSystem lPOIfs = null;
if (file.exists()) {
try{
fout = new FileOutputStream(fileName, true);
fin = new FileInputStream(fileName);
lPOIfs = new POIFSFileSystem(fin);
workbook = new HSSFWorkbook(lPOIfs);
worksheet = workbook.getSheet("POI Worksheet");
for (int i=0; i<workbook.getNumberOfSheets(); i++) {
System.out.println( workbook.getSheetName(i) );
}
HSSFSheet sheet = workbook.getSheetAt(0);
last = sheet.getLastRowNum();
}catch (IOException e) {
e.printStackTrace();
}catch (NullPointerException e){
e.printStackTrace();
}
} else {
//create new file
try{
fout = new FileOutputStream(file);
}catch (IOException e) {
e.printStackTrace();
}
workbook = new HSSFWorkbook();
worksheet = workbook.createSheet("POI Worksheet");
}
if(last != 0){
last = worksheet.getLastRowNum();
}else{
last = worksheet.getLastRowNum()+1;
System.out.println(last);
}
HSSFRow row = worksheet.createRow(last++);
HSSFCell cellA1 = row.createCell((int)0);
cellA1.setCellValue(sender+" and "+peer);
HSSFCell cellB1 = row.createCell((int) 1);
cellB1.setCellValue(mobility);
HSSFCell cellC1 = row.createCell((int) 2);
cellC1.setCellValue(angleOfArival);
HSSFCell cellD1 = row.createCell((int) 3);
cellD1.setCellValue(connectionTime);
System.out.println("Data written");
workbook.write(fout);
fout.flush();
fout.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
////End
}
Но он добавляет только одну строку (только в первый раз). Я сделал отладку этого. Значение last
увеличивается каждый раз, когда вызывается функция, но строка не добавляется каждый раз. Может ли кто-нибудь сказать мне, что я делаю неправильно здесь.
fout = new FileOutputStream(fileName, true);
Пожалуйста, взгляните на файл. Его размер должен быстро увеличиваться, так как вы добавляете полные рабочие книги одну за другой при каждом запуске кода. Не используйте здесь режим добавления.Workbook.write
каждый раз записывает полную книгу. - person Axel Richter   schedule 15.03.2016