2013-11-11 4 views
0

Я пытаюсь создать новый лист в существующей книге excel с использованием apache POI с использованием перформансов и java, но пока не увенчался успехом. Может ли кто-нибудь рассказать мне, как это делается? Я могу сделать это для одного листаКак добавить новые листы в существующую рабочую книгу excel с использованием apache POI и PrimeFaces

Код, указанный мной для написания нескольких листов в одном файле 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. Другие полезные советы, пожалуйста, расскажите мне, как это можно сделать с помощью сервлетов.

+1

не связан с предметами? –

+0

@ user2310289 связано только с ориентирами – spt

ответ

3

Вместо

HSSFSheet sheet = wb.getSheetAt(0);

HSSFSheet sheet = wb.createSheet();

в основном то, что вы хотите, чтобы createSheet -> createRow -> createCell -> serCellValue

В Javadocs превосходны

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

+0

создает лист, но не записывает в него – spt

+0

и снова - 'sheet.createRow()' - вам нужно создавать новые объекты –

+0

На самом деле я хочу писать сообщения на листе на основе типа типа IIMWV, AVIDO и т. д. Может быть, скажите мне, как это делается. – spt

Смежные вопросы