java - 如何使用 apache POI 和 PrimeFaces 将新工作表添加到现有 Excel 工作簿

标签 java jsf primefaces apache-poi

我正在尝试使用 primefaces 和 java 使用 apache POI 在现有 Excel 工作簿中创建一个新工作表,但到目前为止尚未成功。谁能告诉我它是如何完成的? 我可以用单张纸来做

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

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

我的代码是

 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);
                     }
                 }
             }
        }
  } 

在我的 xhtml 中

            <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>

Datatable which is imported to excel sheet

是否可以使用 primefaces 将数据导出到多个工作表。 否则请告诉我如何使用 servlet 来完成此操作。

最佳答案

而不是

HSSFSheet 表 = wb.getSheetAt(0);

HSSFSheetsheet = wb.createSheet();

基本上你想要的是 createSheet -> createRow -> createCell -> serCellValue

Javadocs 非常好

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/package-summary.html

关于java - 如何使用 apache POI 和 PrimeFaces 将新工作表添加到现有 Excel 工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900679/

相关文章:

jquery - 如何使用 jQuery 选择 JSF 组件?

jsf-2 - 下拉列表未显示在 primefaces 数据表列筛选框中

java - Ide CLASSPATH 与系统范围的 CLASSPATH

java - Instanceof - 从先前的 ArrayList 添加新对象到新的 ArrayList

java - 找不到JSF文件上传方法

list - #{bean.list.size} 导致 java.lang.NumberFormatException : For input string: "size"

jsf - 如何动态地将 id(s) 添加到 primefaces 组件?

java - 尝试实现 Primefaces 示例时出错

java - Android 倒计时器 : Add Hour

java - 带有自定义 Java Generic 的 newInstance()?