1.首先是导入Excel2003以前(包括2003)的版本,扩展名是.xls 的

  1. /**
  2. * 操作Excel2003以前(包括2003)的版本,扩展名是.xls
  3. * @param templetFile 文件
  4. * @param startrow 开始行号
  5. * @param startcol 开始列号
  6. * @param sheetnum sheet
  7. * @return list
  8. */
  9. public static List<Map<String,String>> readExcelByXls(MultipartFile templetFile, int startrow, int startcol, int sheetnum) {
  10. List<Map<String,String>> varList = new ArrayList<Map<String,String>>();
  11. try {
  12. HSSFWorkbook wb = new HSSFWorkbook(templetFile.getInputStream());
  13. HSSFSheet sheet = wb.getSheetAt(sheetnum);                  //sheet 从0开始
  14. int rowNum = sheet.getLastRowNum() + 1;                     //取得最后一行的行号
  15. for (int i = startrow; i < rowNum; i++) {                    //行循环开始
  16. Map<String,String> varpd = new HashMap<String,String>();
  17. HSSFRow row = sheet.getRow(i);                          //行
  18. int cellNum = row.getLastCellNum();                     //每行的最后一个单元格位置
  19. for (int j = startcol; j < cellNum; j++) {               //列循环开始
  20. HSSFCell cell = row.getCell(Integer.parseInt(j + ""));
  21. String cellValue = null;
  22. if (null != cell) {
  23. switch (cell.getCellType()) {                   // 判断excel单元格内容的格式,并对其进行转换,以便插入数据库
  24. case 0:
  25. if(HSSFDateUtil.isCellDateFormatted(cell)){
  26. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  27. cellValue=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
  28. } else {
  29. cell.setCellType(1);
  30. cellValue = cell.getStringCellValue();
  31. }
  32. break;
  33. case 1:
  34. cellValue = cell.getStringCellValue();
  35. break;
  36. case 2:
  37. //cell.setCellType(1);
  38. //cellValue = cell.getStringCellValue();
  39. //cellValue = cell.getNumericCellValue() + "";
  40. cellValue = String.valueOf(cell.getDateCellValue());
  41. break;
  42. case 3:
  43. cellValue = "";
  44. break;
  45. case 4:
  46. cellValue = String.valueOf(cell.getBooleanCellValue());
  47. break;
  48. case 5:
  49. cellValue = String.valueOf(cell.getErrorCellValue());
  50. break;
  51. }
  52. } else {
  53. cellValue = "";
  54. }
  55. varpd.put("var"+j, cellValue);
  56. }
  57. varList.add(varpd);
  58. }
  59. } catch (Exception e) {
  60. System.out.println(e);
  61. }
  62. return varList;
  63. }

2.是操作Excel2007的版本,扩展名是.xlsx的


  1. /**
  2. * 是操作Excel2007的版本,扩展名是.xlsx
  3. * @param templetFile 文件
  4. * @param startrow 开始行号
  5. * @param startcol 开始列号
  6. * @param sheetnum sheet
  7. * @return list
  8. */
  9. public static List<Map<String,String>> readExcelByXlsx(MultipartFile templetFile, int startrow, int startcol, int sheetnum) {
  10. List<Map<String,String>> varList = new ArrayList<Map<String,String>>();
  11. try {
  12. XSSFWorkbook wb = new XSSFWorkbook(templetFile.getInputStream());
  13. XSSFSheet sheet = wb.getSheetAt(sheetnum);                  //sheet 从0开始
  14. int rowNum = sheet.getLastRowNum() + 1;                     //取得最后一行的行号
  15. for (int i = startrow; i < rowNum; i++) {                    //行循环开始
  16. Map<String,String> varpd = new HashMap<String,String>();
  17. XSSFRow row = sheet.getRow(i);                          //行
  18. int cellNum = row.getLastCellNum();                     //每行的最后一个单元格位置
  19. for (int j = startcol; j < cellNum; j++) {               //列循环开始
  20. XSSFCell cell = row.getCell(Integer.parseInt(j + ""));
  21. String cellValue = null;
  22. if (null != cell) {
  23. switch (cell.getCellType()) {                   // 判断excel单元格内容的格式,并对其进行转换,以便插入数据库
  24. case 0:
  25. if(HSSFDateUtil.isCellDateFormatted(cell)){
  26. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  27. cellValue=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
  28. } else {
  29. cell.setCellType(1);
  30. cellValue = cell.getStringCellValue();
  31. }
  32. break;
  33. case 1:
  34. cellValue = cell.getStringCellValue();
  35. break;
  36. case 2:
  37. cellValue = cell.getStringCellValue();
  38. //cellValue = cell.getNumericCellValue() + "";
  39. // cellValue = String.valueOf(cell.getDateCellValue());
  40. break;
  41. case 3:
  42. cellValue = "";
  43. break;
  44. case 4:
  45. cellValue = String.valueOf(cell.getBooleanCellValue());
  46. break;
  47. case 5:
  48. cellValue = String.valueOf(cell.getErrorCellValue());
  49. break;
  50. }
  51. } else {
  52. cellValue = "";
  53. }
  54. varpd.put("var"+j, cellValue);
  55. }
  56. varList.add(varpd);
  57. }
  58. } catch (Exception e) {
  59. System.out.println(e);
  60. }
  61. return varList;
  62. }

3.重点来了,结合前两个代码使用,自动识别excel版本文件

    1. public static List<Map<String,String>> readExcel(MultipartFile templetFile, int startrow, int startcol, int sheetnum){
    2. List<Map<String,String>> varList = new ArrayList<Map<String,String>>();
    3. if(templetFile!=null&&templetFile.getSize()>0){
    4. String ofn=templetFile.getOriginalFilename();// 文件名
    5. String extName = ""; // 扩展名格式:
    6. if (ofn.lastIndexOf(".") >= 0){
    7. extName = ofn.substring(ofn.lastIndexOf("."));
    8. }
    9. if(".xls".equals(extName.toLowerCase())){
    10. varList=readExcelByXls(templetFile,startrow,startcol,sheetnum);
    11. }else if(".xlsx".equals(extName.toLowerCase())){
    12. varList=readExcelByXlsx(templetFile,startrow,startcol,sheetnum);
    13. }
    14. }
    15. return varList;
    16. }

导入Excel扩展名是.xls 和.xlsx的的更多相关文章

  1. Java解析Excel工具类(兼容xls和xlsx)

    依赖jar <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml&l ...

  2. 电脑右键新建excel工作表,但是扩展名是.xls,而不是.xlsx

    怀疑是因为之前安装了wps,然后又卸载了,导致的.上网查阅,如下: excel默认新建xls 不是我的问题 Excel 2010/2013/2016在鼠标右键新建xls或xlsx文件后,打开报错“无法 ...

  3. Java 打开Excel,往Excel中存入值,保存的excel格式分别是xls和xlsx

    https://mirrors.cnnic.cn/apache/poi/xmlbeans/release/src/ package Excel; import org.apache.poi.hssf. ...

  4. Java读取Excel文件(包括xls和xlsx)的样例程序

    样例程序如下所示,其中: parseXls()函数依赖于jxl,只能读取xls格式文件: parseExcel()函数依赖于apache poi,能够读取xls和xlsx两种格式的文件. jxl的依赖 ...

  5. C#:导入Excel通用类(Xls格式)

    PS:在CSV格式和XLSX格式中有写到通用调用的接口和引用的插件,所以在这个xls格式里面并没有那么详细,只是配上xls通用类. 一.引用插件NPOI.dll.NPOI.OOXML.dll.NPOI ...

  6. NPOI读取excel功能,兼容xls和xlsx

    样例: IWorkbook workbook; string fileExt = Path.GetExtension(filePath); try { using (var file = new Fi ...

  7. JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案

    现在很多系统都有导出excel的功能,总结一下自己之前写的,希望能帮到其他人,这里我用的是XSSFWorkbook,我们项目在winsang 用的Tomcat,LInux上用的weblogic服务器, ...

  8. 打开Excel时提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致"

    问题描述:     系统安装了WPS时,Analyzer导出excel时候,会提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致",这是Excel的安全问题,   ...

  9. Excel导入工具类兼容xls和xlsx

    package com.bj58.finance.platform.operation.provider.util; import org.apache.log4j.Logger; import or ...

随机推荐

  1. WebLogic下Argument(s) "type" can't be null.

    启动项目出现Argument(s) "type" can't be null.异常.异常如下: java.lang.IllegalArgumentException: Argume ...

  2. CentOS7 下SaltStack部署

    一,概念SaltStack是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的puppet和加强版的func.SaltStack基于Python语言实现,结合 ...

  3. <数据结构系列3>队列的实现与变形(循环队列)

    数据结构第三课了,今天我们再介绍一种很常见的线性表——队列 就像它的名字,队列这种数据结构就如同生活中的排队一样,队首出队,队尾进队.以下一段是百度百科中对队列的解释: 队列是一种特殊的线性表,特殊之 ...

  4. 【Qt开发】Qt应用程序发布封装

    问题:在使用Qt5.3.2编写程序并release,文件夹中已经添加了必要的dll,但在其他机子上运行程序失败,出现了下面的情况: 解决方法一:在C:\Qt\Qt5.3.2\5.3中进入mingw48 ...

  5. vue-cli 3 ----- 项目频繁发送‘sockjs-node/info’请求

    在vue-cli3跑项目时发现了这个问题,浏览器一直在频繁发送这个请求,导致联调时很不方便,而且本地开发时项目也不能实时更新. 看了网上很多的 (1)  解决方案, 大多都是直接去node_modul ...

  6. spring boot-6.profile 多环境支持

    在正式项目中一般都会区分多个环境,一般至少分为开发环境,测试生产环境,生产环境,实际可能会有更加精细的区分,针对不同的环境,项目的配置可能需要切换,spring boot 提供了很方便的环境切换方式. ...

  7. JVM 堆内存设置原理(转)

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  8. Java 读取application.properties配置文件中配置

    实际开发中若需要读取配置文件application.properties中的配置,代码如下.例:读取配置文件中name属性配置值: 代码如下: import org.springframework.c ...

  9. python 序列 转换 各种操作

    # 数据结构 字符串 列表 元组 数字序列# 10-19的整数# r1 = range(10,20)# print(r1)# print(type(r1))## # 19# print(r1[9])# ...

  10. 无法安装 Microsoft Visual Studio 2010 Service Pack 1,因为此计算机的状态不支持此安装。有关如何解决此问题的说明,请参阅 Microsoft 下载中心网站上的自述文件

    解决办法: 32 位系统删除:HKEY_LOCAL_MACHINE\Software\Microsoft\VSTO Designtime Setup\ 64 位系统删除:HKEY_LOCAL_MACH ...