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

问题描述 投票:0回答:1

在这个方法中,我使用xssf类来读取xlsx文件,但是我们不能用于xls file.for xls我们需要有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文件。但我只有一个导入按钮用户可以上传任何类型的文件xls,xlsx但导入按钮我可以有一个动作eigther去xssf或hssf方法。所以我喜欢要知道是否有任何可能的方法在单个方法中使用bot.Or任何其他超类具有Xssf和Hssf类的属性。

java spring-mvc apache-poi xssf hssf
1个回答
3
投票

为了支持HSSF以及XSSF阅读和重写*.xls*.xlsx,你将使用WorkbookFactory创建Workbook。这可以从WorkbookInputStream以及*.xls文件创建*.xlsx

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

然后,只要有可能,您将使用Package org.apache.poi.ss.usermodel的接口而不是特殊的HSSFXSSF类。

自从apache poi到目前为止,这并不总是可行的。但如果不可能,您可以通过instanceof检测到您正在使用的对象(HSSFXSSF)。

对于写作,你将使用instanceof Workbook的相应方法。

  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 Workbook.write关闭了OutputStream。现在在apache poi 4.0.*版本中它不再关闭OutputStream。所以我们需要使用

  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();
© www.soinside.com 2019 - 2024. All rights reserved.