2013-06-26 97 views
0

我需要讀取Excel文件並顯示其內容。 我有一個支持bean代碼,它讀取一個特定的Excel文件並在控制檯中顯示它的內容。我必須在文本編輯器中顯示內容。使用PrimeFaces我得到了<p:fileUpload><p:editor>使用JSF讀取Excel值

這裏的豆:

public void handleFileUpload(FileUploadEvent event) { 
     FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
    public String convertjava(String b) { 
    try 
    { 
    FileInputStream file = new FileInputStream(new File("")); 
      // Get the workbook instance for XLS file 
      HSSFWorkbook workbook = new HSSFWorkbook(file); 
      // Get first sheet from the workbook 
      HSSFSheet sheet = workbook.getSheetAt(0); 
      // Iterate through each rows from first sheet 
      Iterator<Row> rowIterator = sheet.rowIterator(); 
      while (rowIterator.hasNext()) { 
       Row row = rowIterator.next(); 
       // For each row, iterate through each columns 
       Iterator<Cell> cellIterator = row.cellIterator(); 
       while (cellIterator.hasNext()) { 
        Cell cell = cellIterator.next(); 
        switch (cell.getCellType()) { 
        case Cell.CELL_TYPE_BOOLEAN: 
         cell.getBooleanCellValue(); 
         break; 
        case Cell.CELL_TYPE_NUMERIC: 
         cell.getNumericCellValue(); 
         break; 
        case Cell.CELL_TYPE_STRING: 
         cell.getStringCellValue(); 
         break; 
        } 
       } 
       System.out.println(""); 
      } 
      file.close(); 
      FileOutputStream out = new FileOutputStream(new File("")); 
      workbook.write(out); 
      out.close(); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      System.out.println("error"); 
     } 
     } 

這裏是一個facelet:

<h:body> 

    <h:form enctype="multipart/form-data"> 

     <p:fileUpload fileUploadListener="#{uploadBean.handleFileUpload}" 
      mode="advanced" update="display" auto="true" sizeLimit="10000000" 
      allowTypes="/(\.|\/)(xls|xlsx)$/" /> 

<p:growl id="display" showDetail="true" /> 
         <h:commandButton action="#{uploadBean.convertjava}" 
       value="Excel Report" /> 
     </h:form> 
     <br /> 

    </h:body> 

在這裏,我完全空白的是如何調用convertJava()方法通過JSF標籤,並顯示讀取Excel的文本中值編輯。

回答

5

您應該在文件上傳偵聽器方法中獲取上傳的文件。你目前無法做到這一點。你基本上完全忽略了上傳的文件。這確實沒有意義。

其指定爲(視圖作用域)豆的特性如下:

private UploadedFile uploadedFile; 

public void handleFileUpload(FileUploadEvent event) { 
    uploadedFile = event.getFile(); 
    // ... 
} 

然後,只需其饋送到InputStream構造HSSFWorkbook。您目前正在嘗試閱讀不存在的文件。這確實沒有意義。你應該閱讀上傳的文件。更換nonsensicial

FileInputStream file = new FileInputStream(new File("")); 
HSSFWorkbook workbook = new HSSFWorkbook(file); 
// ... 

通過

InputStream input = uploadedFile.getInputStream(); 
HSSFWorkbook workbook = new HSSFWorkbook(input); 
// ... 

順便說一句,環比Excel單元格內,你也無處找到的數據分配給一個屬性/變量。總而言之,你的根本錯誤似乎是你忽略了提供給你的值,而不是將它們賦值給變量以便以後重用/重新顯示。這個問題反過來並不完全與JSF相關,而僅僅是基本的Java。因此,我建議採取JSF暫停並努力學習基本的Java。

+0

非常感謝您的幫助。我將進行必要的更改,並將學習與基本Java相關的東西。但是我仍然非常好奇,並且很想知道如何使用JSF標籤來顯示它。這會增加我對JSF的興趣。因此,爲此獲得解決方案對我來說將非常重要,這樣我就可以知道如何在JSF代碼中使用它。 – ramakrishnan