使用Java和Apache POI将表单附加到现有excel文件

时间:2016-02-12 06:48:59

标签: java excel apache-poi

我有一个Java方法writeToExcel(String sheetName,Map),它创建一个名为' sheetName'的新工作表。在一个新的excel文件中,将地图数据写入其中。当我多次使用不同的sheetName参数调用该方法时,现有的工作表将被最后一个被调用的工作表替换。每当使用不同的sheetName参数调用方法时,我想在同一个excel文件中创建新工作表,而不会丢失现有工作表。这是我的代码。

public static void writeToExcel(String fileName,Map<Integer,String[]> excelData){
    String filePath="/Data/excel.xlsx";
    XSSFWorkbook workbook=new XSSFWorkbook();
    XSSFSheet sheet=workbook.createSheet(fileName);
    Set<Integer> keySet=excelData.keySet();
    int passedCount=0;
    int failedCount=0;
    int rowNo=0;
    int cellNo=0;
    Row row;
    Cell cell;
    try{
        File file=new File(filePath);
        FileOutputStream output=new FileOutputStream(file);
        for(Integer key:keySet){
            row=sheet.createRow(rowNo++);
            String[] dataToWrite=excelData.get(key);
            cellNo=0;
            for(String str:dataToWrite){
                cell=row.createCell(cellNo++);
                cell.setCellValue(str);
            }
        }
        workbook.write(output);
        output.close();
        workbook.close();
    }
    catch(FileNotFoundException e){
        e.printStackTrace();
    }
    catch(IOException e){
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:1)

好像你总是在方法的第二行创建一个新工作簿。因此,不是替换的工作表而是整个工作簿。更好地使用

XSSFWorkbook workbook=new XSSFWorkbook(new File(filePath));

这应该可以解决问题。

答案 1 :(得分:-1)

XSSFWorkbook工作簿=新的XSSFWorkbook(新文件(filePath)); =&GT; XSSFWorkbook工作簿=新的XSSFWorkbook(filePath);因为XSSFWorkbook工作簿没有套装构造函数=新的XSSFWorkbook(新文件(filePath))