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

从Restful后端java读取上传的xlsx文件

高和通
2023-03-14

我正在通过ajax-post调用从UI上传excel文件,并试图从支持的Restful服务java代码中读取该文件,但我无法正确打印excel文件内容。文件名和其他属性打印正确。

[java] org.jboss.resteasy.spi.UnhandledException: org.jboss.resteasy.core.ExceptionAdapter:  : null
public Response upload(final MultipartFormDataInput input)throws Exception{
    for (InputPart part : input.getParts()) { // you might get multiple files
        final String disposition = part.getHeaders().getFirst("Content-Disposition");
        final String fileName =  disposition.replaceFirst("(?i)^.*filename=\"([^\"]+)\".*$", "$1");
        InputStream inputStream = part.getBody(FileInputStream.class, null);
        try {
            Workbook workbook = WorkbookFactory.create(inputStream);
            Sheet datatypeSheet = workbook.getSheetAt(0);
            Iterator<Row> iterator = datatypeSheet.iterator();

            while (iterator.hasNext()) {
                Row currentRow = iterator.next();
                Iterator<Cell> cellIterator = currentRow.iterator();

                while (cellIterator.hasNext()) {

                    Cell currentCell = cellIterator.next();
                    if (currentCell.getCellType() == Cell.CELL_TYPE_STRING) {
                        System.out.print(currentCell.getStringCellValue() + "--");
                    } else if (currentCell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                        System.out.print(currentCell.getNumericCellValue() + "--");
                    } else if(currentCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
                        System.out.print(currentCell.getBooleanCellValue() + "--");
                    } else {
                        System.out.print("<BLANK>--");
                    }
                }
                System.out.println();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    input.close();
    return Response.ok("OK").build();
}
 [java] Caused by: java.lang.IllegalArgumentException: Your InputStream was neither an OLE2 stream, nor an OOXML stream

共有1个答案

束阳旭
2023-03-14

我发现我们需要将excel流作为

File.class而不是InputStream.class

public Response upload(final MultipartFormDataInput input)throws Exception{
    Map<String, List<InputPart>> formDataMap = input.getFormDataMap();
    File inputStream = formDataMap.get("files").get(0).getBody(File.class, null);
    String extraField = formDataMap.get("extraField").get(0).getBodyAsString();
    String CustomField =  formDataMap.get("CustomField").get(0).getBodyAsString();

    try {

        Workbook workbook = WorkbookFactory.create(inputStream);
        Sheet datatypeSheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = datatypeSheet.iterator();

        while (iterator.hasNext()) {

            Row currentRow = iterator.next();
            Iterator<Cell> cellIterator = currentRow.iterator();

            while (cellIterator.hasNext()) {
                Cell currentCell = cellIterator.next();

                if (currentCell.getCellType() == Cell.CELL_TYPE_STRING) {
                    System.out.print(currentCell.getStringCellValue() + "--");
                } else if (currentCell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                    System.out.print(currentCell.getNumericCellValue() + "--");
                } else if(currentCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
                    System.out.print(currentCell.getBooleanCellValue() + "--");
                } else {
                    System.out.print("<BLANK>--");
                }
            }
            System.out.println();

        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }


    input.close();
    return Response.ok("OK").build();
}
 类似资料:
  • 问题内容: 我需要在Java应用程序中读取Excel 2007 XLSX文件。有谁知道一个很好的API来完成这项任务? 问题答案: AFAIK还没有可用的xlsx库。但是有些旧的xls: 一个库是jxls,它内部使用已经提到的POI。 其他2个链接:处理Excel文件,用于读写Excel XLS文档文件的Java库 。

  • 我正在使用Java开发一个web应用程序,在这里我有一个方法可以读取。使用apache poi的xlsx文件: 该方法工作正常,但是该方法处理具有数千行记录的文件的可能性有多大,例如,大约2530万行。当处理一个大文件时,我采取以下异常: 我需要知道如何避免这种错误。例如,如果有,请读取并处理该文件。xlsx 1000至1000线,或其他解决方案。

  • 因此,我一直在使用Python3.2和OpenPyXL的iterable工作簿,如这里的“优化阅读器”示例所示。 当我尝试使用此策略读取从简单文档中提取的一个或多个文件时,就会出现问题。zip存档(手动和通过python zipfile包)。当我调用我得到“A”和我得到1,当要求打印每个单元格的值时,如下所示: 它打印A1、A2、A3、A4、A5、A6和A7中的值,而不管文件实际有多大。文件本身没

  • 我需要帮助在阅读xlsx文件,也使用密码解锁,正如上面所做的。

  • 我在用图书馆 我在努力 库,但无法将其转换为工作簿 注意:在最终结果中,我希望返回XSSFWorkbook 上面的代码会内存溢出,任何帮助都将提前感谢

  • 我在Ubuntu14版本上使用Java1.7版本的STS下运行我的代码,尽管我已经通过添加Apache POI3.9版本和3.2版本的所有JAR测试了两个以下的程序,但我无法解决这个问题。但每次它都给出几乎相同的错误 好心地建议我一些事情,提前谢谢。 我得到的错误是 下面的代码用于从文件中读取数据 上面的代码生成了这个错误