将数据写入java中的Excel第一个选项卡数据在写入第二个选项卡时不显示

时间:2016-03-22 13:46:38

标签: java excel

当我将数据添加到Excel工作表中的第二个选项卡时。第一个选项卡数据未显示。 如果我删除第二个标签的代码,则第一个标签数据可见。

HSSFSheet sheet1 = wb.createSheet("A ");
HSSFSheet sheet2 = wb.createSheet("B");

HSSFFont headerFont = wb.createFont();
headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD);

headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
headerStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
headerStyle.setFillBackgroundColor(HSSFColor.WHITE.index);
headerStyle.setFont(headerFont);
try
{
        FileOutputStream fileOut = new FileOutputStream("C:\\Report.xls");

        HSSFRow sessionname = sheet1.createRow(0);
        HSSFCell title = sessionname.createCell(0);
        title.setCellStyle(headerStyle);
        title.setCellValue("Supported cipher Report");

        HSSFRow row = sheet1.createRow(5);

        HSSFCell cell0 = row.createCell(0);
        cell0.setCellStyle(headerStyle);
        cell0.setCellValue("One"); 

        HSSFCell cell1 = row.createCell(1);
        cell1.setCellStyle(headerStyle);
        cell1.setCellValue("two");

        HSSFCell cell2 = row.createCell(2);
        cell2.setCellStyle(headerStyle);
        cell2.setCellValue("three");

        HSSFCell cell3 = row.createCell(3);
        cell3.setCellStyle(headerStyle);
        cell3.setCellValue("four");

        HSSFCell cell4 = row.createCell(4);
        cell4.setCellStyle(headerStyle);
        cell4.setCellValue("five");


        if (!list.isEmpty())
        {
            int rowNumber = 6;
            for (Result s : supportedlist)
            {
                HSSFRow nextrow = sheet1.createRow(rowNumber);
                nextrow.createCell(0).setCellValue(s.One());
                nextrow.createCell(1).setCellValue(s.Two());
                nextrow.createCell(2).setCellValue(s.Three());
                nextrow.createCell(3).setCellValue(s.four());
                nextrow.createCell(4).setCellValue(s.five());
                rowNumber++;
            }
        }
        sheet1.autoSizeColumn(0);
        sheet1.autoSizeColumn(1);
        sheet1.autoSizeColumn(2);
        sheet1.autoSizeColumn(3);
        sheet1.autoSizeColumn(4);
        System.out.println("sheet1 writting");

    wb.write(fileOut);
    fileOut.flush();
    fileOut.close();

当我传递sheet2时,其余代码与上面相同。 在取消显示sheet2数据时,不显示sheet1选项卡数据。

2 个答案:

答案 0 :(得分:0)

我认为您在写sheet1后正在将sheet2的值更改为sheet1。现在,根据您的代码发生的事情是您再次创建/写入文件。因此,它replaces旧文件和数据,并写入第二张表中的新文件。

第二次运行程序时,下面的行会覆盖数据

 FileOutputStream fileOut = new FileOutputStream("C:\\Report.xls");

您应该做的是在写sheet2时,您应该检查是否存在文件。如果存在,则将新工作表添加到现有excel文件。如果不存在,则创建一个新文件,然后创建一个工作表。

做这样的事情

   FileOutputStream fileOut = new FileOutputStream(file);

    if (file.exists()) {
        try {
            workbook = (HSSFWorkbook)WorkbookFactory.create(file);
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }
        HSSFSheet sheet = workbook.createSheet("Sample sheet2");
    }
    else{
        workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Sample sheet1");
    }
    workbook.write(fileOut);
    fileOut.close();

为避免覆盖现有文件,请使用以下内容。这会将数据附加到现有文件中。

FileOutputStream fileOut = new FileOutputStream("C:\\Report.xls", true);

答案 1 :(得分:0)

问题是我创建了两个实例[new createExcel(one);和新的createExcel(两个);在调用函数时。因为wb是实例的一部分。所以它用sheet1和sheet2创建了新的excel。从那以后我只写了sheet2数据。所以sheet2数据只显示。感谢您的支持。