0

我需要读取一个 Excel 文件并显示其内容。我有一个支持 bean 代码,它读取特定的 Excel 文件并在控制台中显示其内容。我必须在文本编辑器中显示内容。使用 PrimeFaces 我得到了<p:fileUpload>and <p:editor>

这是豆子:

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 值一无所知。

4

1 回答 1

5

您应该在文件上传侦听器方法中获取上传的文件。你目前无处可做。您基本上完全忽略了上传的文件。这确实没有意义。

将其分配为(视图范围)bean 的属性,如下所示:

private UploadedFile uploadedFile;

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

然后只需将其InputStream提供给HSSFWorkbook构造函数。您当前正在尝试读取一个不存在的文件。这确实没有意义。您应该正在阅读上传的文件。替换无意义的

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。

于 2013-06-26T16:44:37.907 回答