当前位置: 首页 > 知识库问答 >
问题:

避免excel中的文件内容被覆盖

常嘉平
2023-03-14

我只想有一个文件输出流,将工作簿的内容写入应用程序中的文件中,并在此 excel 中创建多个工作表。我正在使用Apache POI来读取/写入我的excel。我有以下方法这样做 -

private static void writeToSpreadSheet(String test,Map<String,String> errorMap,Object object) throws IOException {
    HSSFWorkbook workbook = new HSSFWorkbook()
    HSSFSheet sheet = workbook.createSheet(test);
    FileOutputStream fis = new FileOutputStream("output/test.xls");
    //do stuff and finally write workbook contents to a file
    workbook.write(fis);
    if (fis != null)
        fis.close();
}

我在这里面临的问题是,每次我调用WriteToSpreadSheet时,都会创建一个新文件,并且存量数据会被覆盖。我只想要一个文件,并且需要将新的工作表添加到我现有的文件中。我如何实现这一点?

共有1个答案

益稳
2023-03-14

我不在我的机器附近,所以我无法为您提供确切的代码库,但如果您按照确切的步骤进行操作,那么您可以达到预期的结果。

我已经从这里和那里组装了代码,它不能按原样工作。你必须修改代码,使其按你想要的方式工作。我把那部分留给你。

final File file = "/output/test.xls";
HSSFWorkbook workbook = null;
FileOutputStream fileOut = new FileOutputStream(file);

private static void writeToSpreadSheet(String test,
        Map<String, String> errorMap, Object object) throws IOException {
    // Check whether your file exist
    // if not then crate a workbook
    // something like below

    if (!file.exists()) {
        System.out.println("Creating a new workbook '" + file + "'");
        workbook = new HSSFWorkbook();
    } else {
        // create a method to get very last sheet number something like
        // following .
        int sheetIndex = getLastSheetIndex();
        // if you dont to go with find last sheet index idea then you can
        // create your unique name may be like timestamp or so
        // add the new sheet with new index
        HSSFSheet sheet = workbook.createSheet("Test Sheet " + sheetIndex);
        // Write your content
        workbook.write(fileOut);
        fileOut.close();
    }

}

private static int getLastSheetIndex() {
    int sheetIndex = 1;
    while (workbook.getSheet("Test Sheet " + sheetIndex) != null) {
        sheetIndex++;
    }
    return sheetIndex;
}

目前你在做什么:

private static void writeToSpreadSheet(String test,
        Map<String, String> errorMap, Object object) throws IOException {
    // Creating the new workbook every time you call this method
    HSSFWorkbook workbook = new HSSFWorkbook();

    // Adding the same sheet to newly created workbook
    HSSFSheet sheet = workbook.createSheet(test);
    FileOutputStream fis = new FileOutputStream("output/test.xls");
    // causing to overwrite your old workbook
    workbook.write(fis);
    if (fis != null)
        fis.close();
}
 类似资料:
  • 问题内容: 堆垛机。我一直在网站上搜索我的问题,但没有找到我想要的东西。我坚持下面的代码: 得到了一个不错的数组列表,但是如果我在ArrayList中添加更多“ newUsers”,它们似乎会相互覆盖。我不想创建一个newUser1,newUser2对象,因为稍后在我的程序中,我必须能够直接从该程序添加新用户。 如何实现呢? ValidateUser: } 问题答案: 如果我理解正确,那么您是以这

  • 我正在浏览Apache FOP快速入门。从命令行,我将一个包含svg元素的简单xml文件转换成pdf文件。我可以做到这一点,但由svg生成的图像被切断。我不熟悉XSL-FO 以下是xml: 下面是xsl: 图像应该显示红色 我缺少了哪些属性,如何才能正确显示整个svg图像(两个完整的圆圈重叠)? 谢谢, 勃兰特 附言:我会发一张图片来展示这个问题,但是我没有足够高的声誉。

  • 假设我想从许多xmls中编写具有以下格式的文本输出。其中一些xml文件可能没有节点[name、age、schood]的值。 <学生> 因此,基本上我使用的是iu正在使用的一个xsl文件,并试图通过考虑这些类似格式的xml文件(具有不同的节点值)来生成输出。 但是我只需要将相应的输出写到具有特定条件的xml文件中。[假设有一个名称,因为有些xml文件不包含名称值]。 因此,如果我有5个xml文件要转

  • 问题内容: 我有2个excel文件,我想比较内容并突出显示差异。例如: 第一个档案… 有没有第三方图书馆可以做到这一点?或最好的方法是什么? 问题答案: 就像DaDaDom所说的那样,Apache POI是您想要的。您可以从此页面下载它。请注意,POI项目不是完全独立的,您可能需要下载一些额外的库。请遵循Apache POI网站上的说明。这是您的用法: 如果这是一个新文件,则可能需要先创建图纸才能

  • 我试图实现材料抽屉菜单使用 > Android支持v7.widget。工具栏 android.support.design.widget.NavigationView 问题既是NavigationView *注意:我曾尝试用LinearLayout替换RelativeLayout作为容器,但不起作用。 activity_布局。xml 碎片xml ActivityMain。Java语言 } 这里是结

  • 问题内容: 我可以在不生成编译的.pyc文件的情况下运行python解释器吗? 问题答案: 来自“ Python 2.6的新增功能- 解释器更改” : 现在,可以通过向Python解释器提供-B开关,或者通过在运行解释器之前设置 PYTHONDONTWRITEBYTECODE环境变量来阻止Python编写.pyc或.pyo文件。此设置可作为Python程序的 变量使用,并且Python代码可以更改