简体   繁体   中英

Apache POI append data to excel sheet not working

I am reading data from an arraylist and writing this to an excel sheet. The problem is my excel is getting overwritten each time. Here is my code. I can't figure out what is wrong here :( Can someone please help?

public static void main( String[] args ) throws Exception
{
        List<String> fileData = new ArrayList<String>();
        for(File file:files) {
            fileData.add(readFileContents(file.getAbsolutePath()));
        }
        for(String fileContent:fileData) {
            //do some stuff that in turn calls the writeDataToExcel method 

    }
}

private static void writeDataToExcel(String test,Map<String,String> dataMap,Object object) throws IOException {
    File file = new File("input/data.xls");
    Map<String,Object[]> data = new LinkedHashMap<String,Object[]>();       
    XSSFWorkbook workbook = null; 
    int count = 0;
    XSSFSheet sheet = null;
    if(file.exists()) {
        workbook = new XSSFWorkbook(new FileInputStream(file));
        sheet = workbook.getSheet("Data Sheet");
    }
    else {
        workbook = new XSSFWorkbook();
        sheet = workbook.createSheet("Data Sheet");
        //count = sheet.getLastRowNum();
    }

    data.put("1", new Object[]{"Id","Name","Field","Description","Value"});
    for(Map.Entry<String, String> dataMp:dataMap.entrySet()) {
        data.put(Integer.toString(count+2), new Object[]{id,object.getClass().getSimpleName(),dataMp.getKey(),dataMp.getValue(),"null"});
        count++;
    }
    Set<String> keyset = data.keySet();
    int rownum = 0;
    for (String key : keyset) {
        Row row = sheet.createRow(rownum++);
        Object [] objArr = data.get(key);
        int cellnum = 0;
        for (Object obj : objArr) {
            Cell cell = row.createCell(cellnum++);
             if(obj instanceof String)
                cell.setCellValue((String)obj);
        }
    }
    FileOutputStream fis = new FileOutputStream("input/data.xls");
    workbook.write(fis);
    if(fis!=null)
        fis.close();
}

I think problem is at line

int rownum = 0;

this will set rowNUm to zero each time and sheet will be written from zero row

You need to persist this rowNum value if you want to append data in the sheet

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM