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

如何在spring mvc中使用java导入xls和xlsx文件

万俟丁雷
2023-03-14

在这个方法中,我使用了xssf类,它用于读取xlsx文件,但我们不能为xlsfile.forxls这样做,我们需要有Hssf类。用户可以在那里导入任何格式。我的要求,是否有任何类可以用来代替xssf和hssf来读取这两种文件。在我的例子中,我使用了xssf。

  @RequestMapping(value="/import",method = RequestMethod.POST)
     public ModelAndView imports(Model model, @RequestParam("excelFile") MultipartFile excelfile){
        try {
            List<DepartmentModel> lstUser = new ArrayList<>();
            int i = 0;

            XSSFWorkbook workbook = new XSSFWorkbook(excelfile.getInputStream());

            XSSFSheet worksheet = workbook.getSheetAt(0);
            while (i <= worksheet.getLastRowNum()) {

                DepartmentModel user = new DepartmentModel();

                XSSFRow row = worksheet.getRow(i++);
user.setHrName(row.getCell(0).getStringCellValue());
user.setDepartmentName(row.getCell(1).getStringCellValue());
user.setParentDepartment(row.getCell(2).getStringCellValue());


                lstUser.add(user);

            }

            departmentService.updateList(lstUser);

            model.addAttribute("lstUser", lstUser);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return new ModelAndView("redirect:/listOfDepartment");
    }

我有另一种方法,我使用Hssf读取xls文件。但iam只有一个导入按钮用户可以上载任何类型的文件xls、xlsx,但对于导入按钮,我可以有一个操作eigther转到xssf或hssf方法。所以我想知道是否有任何可能的方法可以在单一的方法中实现两者的结合。或任何其他具有Xssf和Hssf类属性的超类。

共有1个答案

凤明朗
2023-03-14

支持HSSF和XSSF的读取和重写。xls和。xlsx,您将使用WorkbookFactory创建工作簿。这可以从*的输入流创建工作簿。xls以及of。xlsx文件。

 FileInputStream fileinputstream = new FileInputStream("pathToExcelFile.xls_or_.xlsx");
 Workbook workbook = WorkbookFactory.create(fileinputstream);

然后,尽可能长时间地使用Packageorg.apache.poi.ss.usermodel的接口,而不是特殊的HSSFXSSF类。

这并不总是可能的,因为apache poi目前正在开发中。但如果不可能,您可以通过instanceof来检测您真正使用的对象(HSSF或XSSF)。

对于编写,您将使用依赖于Workbookinstanceof的适当方法。

  if (workbook instanceof XSSFWorkbook) {
   workbook.write(new FileOutputStream("pathToExcelFile.xlsx"));
  } else if (workbook instanceof HSSFWorkbook) {
   workbook.write(new FileOutputStream("pathToExcelFile.xls"));
  }
  workbook.close();

apache poi 3.17之前的工作簿。写入已关闭输出流。现在在apache poi 4.0中* 版本它不再关闭输出流。所以我们需要使用

  FileOutputStream out = null;
  if (workbook instanceof XSSFWorkbook) out = new FileOutputStream("pathToExcelFile.xlsx");
  else if (workbook instanceof HSSFWorkbook) out = new FileOutputStream("pathToExcelFile.xls");
  if (out != null) {
   workbook.write(out);
   out.close();
  }
  workbook.close();
 类似资料:
  • 我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。

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

  • 我想用Apache POI打开我的excel文件。 这样我就可以打开xlsx文件: 如果我不知道格式,如何打开这两种类型的文件?

  • 我尝试以两种方式导入.xlsx文件: 1)如果我从日食中跑出来,如果我导入,我能够成功导入 2)如果我为我的产品创建了一个. jar文件,并在不使用eclipse的情况下作为一个独立的应用程序运行,我会得到一个OutOfMemoryException,因此无法导入 我的文件大小约为3mb,我使用poi 3.9、poi-ooxml-3.9、poi-ooxml-Schemas-3.9、dom4j和xm

  • 我有一个存储在变量中的数据,然后我想把我的数据写到excel文件中。xlsx)。(即)我使用自动化测试工具,如硒从网页上获取数据,我把它存储在变量,我想写在xlsx文件 在大量的谷歌搜索后,我发现许多用户使用列表或对象来写入。xlsx文件。 我创建了一个列表并将我的变量添加到该列表中,并使用循环语句(for循环)通过打印来检查我的数据是否存储在列表中。 然后我创建了XSSFWorkbook和XSS

  • 我有一个基于Java的Web应用程序,我正在Microsoft Azure中运行。操作系统:RHEL7.3版本。Web服务器:Apache9所以问题是当上传一个。xlsx文件时,它会给我以下错误。同样的配置,每一个其他的infra(包括AWS,本地),每一件事都运行良好。我很困惑,错误可能在哪里,即在服务器级别配置或Java应用程序代码中的错误? 例外 错误:错误返回类型异常详细信息:位置:com