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

如何使用apache POI和PrimeFaces向现有excel工作簿添加新工作表

刘乐童
2023-03-14

我试图使用apache POI、使用primefaces和java在现有的excel工作簿中创建一个新的工作表,但是到目前为止还没有成功。谁能告诉我这是怎么做的吗?我可以做单张

下面的代码是我为在一个xls文件中创建多个工作表而编写的,我给出的条件是它没有大于65535的of行创建新工作表并迭代它,但它显示错误

警告:允许范围(0..65535)之外的无效行号(65536)java.lang.IllegalArgumentException:允许范围(0..65535)之外的无效行号(65536)

 public void postProcessXLS(Object document) {
 HSSFWorkbook wb = (HSSFWorkbook) document;
    HSSFSheet sheet = wb.getSheetAt(0);
        HSSFFont font = wb.createFont();
        font.setFontName(HSSFFont.FONT_ARIAL);
        Iterator rowIterator = sheet.rowIterator();
        HSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setWrapText(false);
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_GENERAL);
        cellStyle.setFont(font);
        System.out.println("Row number:"+sheet.getLastRowNum());
        while (rowIterator.hasNext()) 
        {
            System.out.println("Row number:"+sheet.getLastRowNum());
             //sheet.rowIterator().next().getRowNum();
             if(sheet.getLastRowNum() >= 65535) 
             {
                 String sheetName = "";
                 for(int i=0;i<searchResults.size();i++)
                 {
                     sheetName = "Document-" + i; 
                     HSSFSheet mySheet = wb.createSheet(sheetName); 
                     HSSFRow hssfRow = (HSSFRow) rowIterator.next();
                     Iterator iterator = hssfRow.cellIterator();
                     while (iterator.hasNext()) 
                     {
                         HSSFCell hssfCell = (HSSFCell) iterator.next();
                         hssfCell.setCellStyle(cellStyle);
                     }
                 }
             }
        }
  } 
            <h:commandLink>
                <p:graphicImage value="resources/images/excel.png" />
                <p:dataExporter type="xls" target="nmeadata"
                    postProcessor="#{decodeNMEAMessageAction.postProcessNmeaXLS}"
                    fileName="decoded_all_nmeadata" />
            </h:commandLink>
            <h:commandLink>
                <p:graphicImage value="resources/images/excel.png" />
                <p:dataExporter type="xls" target="nmeadata"
                    postProcessor="#{decodeNMEAMessageAction.postProcessNmeaXLS}"
                    fileName="decoded_page_nmeadata" pageOnly="true" />
            </h:commandLink>

是否可以使用PrimeFaces将数据导出到多个工作表。另外,请告诉我如何使用servlets来完成。

共有1个答案

闻人望
2023-03-14

而不是

hssfsheet sheet=wb.getsheetat(0);

hssfsheet sheet=wb.createsheet();

 类似资料:
  • 我试图将列表数据写入一个工作簿中的多个excel表格。与第一个列表一样,代码将创建新工作簿并为列表[1]创建新工作表,对于第二个列表,它将在现有工作簿中创建新工作表,依此类推。所以我写了下面的代码。但是它不起作用,我只能看到列表[1]的第一页。有人能帮我提供任何替代解决方案吗? 下面我写的代码 谢谢,Priyank Shah

  • 问题内容: 我已经浏览了几乎所有以前的线程,但是仍然无法正常工作。我正在尝试向现有工作簿中添加新工作表。我的代码有效,但是它继续添加更多(实际上很多)工作表。我不知道解决方案。下面是我的代码 问题答案: 如果要向现有电子表格中添加工作表,只需继续并将新工作表添加到文件中,而不是复制对象并尝试向其中添加新工作表。

  • 问题内容: 在的文档中,我了解了以下内容: 如何从现有的工作簿/工作表中阅读: 如何创建新的工作簿/工作表: 我现在想做的是在现有工作簿中打开一个现有工作表,并写入该工作表。 我已经尝试过类似的东西: 但仅是模块的一部分,而不是。 有任何想法吗? Edit1:在Olivers的建议下,我调查并尝试了以下操作: 但是,这给了我以下错误信息: 编辑2:错误消息是由于不正确使用该功能。终于找到了如何使用

  • 所以在问这个之前,我搜索并发现了一些与我在这里想要做的相似的事情。 基本上我有工作簿AlphaMaster。这个工作簿是一个模板,我想用它来创建每周的新工作簿。 在本工作簿中,有名为“周一至周六”的工作表,以及带有相应日期的周一、周二等其他工作表。 我创建了一个在打开工作簿时加载的表单。我想要的是当我单击表单运行时,它将: > 将代码保存模板作为新工作簿运行 根据userform1的输入重命名工作

  • 我使用这段代码将工作簿中的每一张工作表复制到一个新的工作簿中,它工作得很好,但它颠倒了工作表的顺序,是否有任何办法阻止它这样做? 我正在复制所有的工作表,这样我就可以将它保存为不同的文件扩展名,这是我发现唯一有效的方法。

  • 我有一个要求,需要将数据验证添加到整个列中,而不是特定的单元格中。我查阅了ApachePOI的文档,发现了下面的示例 但是上面的例子为特定的单元格创建了一个下拉数据验证。在这种情况下,行0,列0。列中的其余单元格没有验证。但是在实际的excel文件中,我们可以这样做,所以这应该是可能的。我尝试并搜索了很多,但无法找到解决方案。请帮助...