Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java和Apache POI将工作表附加到现有excel文件_Java_Excel_Apache Poi - Fatal编程技术网

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

使用Java和Apache POI将工作表附加到现有excel文件,java,excel,apache-poi,Java,Excel,Apache Poi,我有一个Java方法writeToExcel(String sheetName,Map),它在一个新的excel文件中创建一个名为“sheetName”的新工作表,并将地图数据写入其中。当我多次使用不同的sheetName参数调用该方法时,现有的工作表将被上次调用的工作表替换。每次使用不同的sheetName参数调用该方法时,我都希望在同一excel文件中创建新的工作表,而不会丢失现有工作表。这是我的密码 public static void writeToExcel(String fileNa

我有一个Java方法writeToExcel(String sheetName,Map),它在一个新的excel文件中创建一个名为“sheetName”的新工作表,并将地图数据写入其中。当我多次使用不同的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();
    }
}
publicstaticvoidwritetoexcel(字符串文件名,映射excelData){
字符串filePath=“/Data/excel.xlsx”;
XSSFWorkbook工作簿=新XSSFWorkbook();
XSSFSheet sheet=workbook.createSheet(文件名);
Set keySet=excelData.keySet();
int passedCount=0;
int failedCount=0;
int rowNo=0;
int cellNo=0;
行行;
细胞;
试一试{
文件文件=新文件(文件路径);
FileOutputStream输出=新的FileOutputStream(文件);
for(整数键:键集){
row=sheet.createRow(rowNo++);
字符串[]dataToWrite=excelData.get(键);
cellNo=0;
for(字符串str:dataToWrite){
cell=row.createCell(cellNo++);
cell.setCellValue(str);
}
}
工作簿。编写(输出);
output.close();
workbook.close();
}
catch(filenotfounde异常){
e、 printStackTrace();
}
捕获(IOE异常){
e、 printStackTrace();
}
}

似乎您总是在方法的第二行创建新工作簿。因此,被替换的不是工作表,而是整个工作簿。更好地利用

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

这应该可以解决问题。

XSSF工作簿=新XSSF工作簿(新文件(文件路径));=>XSSF工作簿=新XSSF工作簿(文件路径);作为XSSFWorkbook工作簿的不合适构造函数=新XSSFWorkbook(新文件(文件路径))

Post-provide。请确保将您的代码复制粘贴到新项目中,并确保在将其发布到此处之前编译并运行。欢迎使用Stackoverflow。请编辑答案以格式化代码。现在是无法理解的。你也可以考虑扩大你的答案吗?它可以帮助询问者和其他成员更好地理解您的解决方案,并提供获取解决方案的上下文。