导入Excel扩展名是.xls 和.xlsx的
1.首先是导入Excel2003以前(包括2003)的版本,扩展名是.xls 的
- /**
- * 操作Excel2003以前(包括2003)的版本,扩展名是.xls
- * @param templetFile 文件
- * @param startrow 开始行号
- * @param startcol 开始列号
- * @param sheetnum sheet
- * @return list
- */
- public static List<Map<String,String>> readExcelByXls(MultipartFile templetFile, int startrow, int startcol, int sheetnum) {
- List<Map<String,String>> varList = new ArrayList<Map<String,String>>();
- try {
- HSSFWorkbook wb = new HSSFWorkbook(templetFile.getInputStream());
- HSSFSheet sheet = wb.getSheetAt(sheetnum); //sheet 从0开始
- int rowNum = sheet.getLastRowNum() + 1; //取得最后一行的行号
- for (int i = startrow; i < rowNum; i++) { //行循环开始
- Map<String,String> varpd = new HashMap<String,String>();
- HSSFRow row = sheet.getRow(i); //行
- int cellNum = row.getLastCellNum(); //每行的最后一个单元格位置
- for (int j = startcol; j < cellNum; j++) { //列循环开始
- HSSFCell cell = row.getCell(Integer.parseInt(j + ""));
- String cellValue = null;
- if (null != cell) {
- switch (cell.getCellType()) { // 判断excel单元格内容的格式,并对其进行转换,以便插入数据库
- case 0:
- if(HSSFDateUtil.isCellDateFormatted(cell)){
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- cellValue=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
- } else {
- cell.setCellType(1);
- cellValue = cell.getStringCellValue();
- }
- break;
- case 1:
- cellValue = cell.getStringCellValue();
- break;
- case 2:
- //cell.setCellType(1);
- //cellValue = cell.getStringCellValue();
- //cellValue = cell.getNumericCellValue() + "";
- cellValue = String.valueOf(cell.getDateCellValue());
- break;
- case 3:
- cellValue = "";
- break;
- case 4:
- cellValue = String.valueOf(cell.getBooleanCellValue());
- break;
- case 5:
- cellValue = String.valueOf(cell.getErrorCellValue());
- break;
- }
- } else {
- cellValue = "";
- }
- varpd.put("var"+j, cellValue);
- }
- varList.add(varpd);
- }
- } catch (Exception e) {
- System.out.println(e);
- }
- return varList;
- }
2.是操作Excel2007的版本,扩展名是.xlsx的
- /**
- * 是操作Excel2007的版本,扩展名是.xlsx
- * @param templetFile 文件
- * @param startrow 开始行号
- * @param startcol 开始列号
- * @param sheetnum sheet
- * @return list
- */
- public static List<Map<String,String>> readExcelByXlsx(MultipartFile templetFile, int startrow, int startcol, int sheetnum) {
- List<Map<String,String>> varList = new ArrayList<Map<String,String>>();
- try {
- XSSFWorkbook wb = new XSSFWorkbook(templetFile.getInputStream());
- XSSFSheet sheet = wb.getSheetAt(sheetnum); //sheet 从0开始
- int rowNum = sheet.getLastRowNum() + 1; //取得最后一行的行号
- for (int i = startrow; i < rowNum; i++) { //行循环开始
- Map<String,String> varpd = new HashMap<String,String>();
- XSSFRow row = sheet.getRow(i); //行
- int cellNum = row.getLastCellNum(); //每行的最后一个单元格位置
- for (int j = startcol; j < cellNum; j++) { //列循环开始
- XSSFCell cell = row.getCell(Integer.parseInt(j + ""));
- String cellValue = null;
- if (null != cell) {
- switch (cell.getCellType()) { // 判断excel单元格内容的格式,并对其进行转换,以便插入数据库
- case 0:
- if(HSSFDateUtil.isCellDateFormatted(cell)){
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- cellValue=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
- } else {
- cell.setCellType(1);
- cellValue = cell.getStringCellValue();
- }
- break;
- case 1:
- cellValue = cell.getStringCellValue();
- break;
- case 2:
- cellValue = cell.getStringCellValue();
- //cellValue = cell.getNumericCellValue() + "";
- // cellValue = String.valueOf(cell.getDateCellValue());
- break;
- case 3:
- cellValue = "";
- break;
- case 4:
- cellValue = String.valueOf(cell.getBooleanCellValue());
- break;
- case 5:
- cellValue = String.valueOf(cell.getErrorCellValue());
- break;
- }
- } else {
- cellValue = "";
- }
- varpd.put("var"+j, cellValue);
- }
- varList.add(varpd);
- }
- } catch (Exception e) {
- System.out.println(e);
- }
- return varList;
- }
3.重点来了,结合前两个代码使用,自动识别excel版本文件
- public static List<Map<String,String>> readExcel(MultipartFile templetFile, int startrow, int startcol, int sheetnum){
- List<Map<String,String>> varList = new ArrayList<Map<String,String>>();
- if(templetFile!=null&&templetFile.getSize()>0){
- String ofn=templetFile.getOriginalFilename();// 文件名
- String extName = ""; // 扩展名格式:
- if (ofn.lastIndexOf(".") >= 0){
- extName = ofn.substring(ofn.lastIndexOf("."));
- }
- if(".xls".equals(extName.toLowerCase())){
- varList=readExcelByXls(templetFile,startrow,startcol,sheetnum);
- }else if(".xlsx".equals(extName.toLowerCase())){
- varList=readExcelByXlsx(templetFile,startrow,startcol,sheetnum);
- }
- }
- return varList;
- }
导入Excel扩展名是.xls 和.xlsx的的更多相关文章
- Java解析Excel工具类(兼容xls和xlsx)
依赖jar <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml&l ...
- 电脑右键新建excel工作表,但是扩展名是.xls,而不是.xlsx
怀疑是因为之前安装了wps,然后又卸载了,导致的.上网查阅,如下: excel默认新建xls 不是我的问题 Excel 2010/2013/2016在鼠标右键新建xls或xlsx文件后,打开报错“无法 ...
- Java 打开Excel,往Excel中存入值,保存的excel格式分别是xls和xlsx
https://mirrors.cnnic.cn/apache/poi/xmlbeans/release/src/ package Excel; import org.apache.poi.hssf. ...
- Java读取Excel文件(包括xls和xlsx)的样例程序
样例程序如下所示,其中: parseXls()函数依赖于jxl,只能读取xls格式文件: parseExcel()函数依赖于apache poi,能够读取xls和xlsx两种格式的文件. jxl的依赖 ...
- C#:导入Excel通用类(Xls格式)
PS:在CSV格式和XLSX格式中有写到通用调用的接口和引用的插件,所以在这个xls格式里面并没有那么详细,只是配上xls通用类. 一.引用插件NPOI.dll.NPOI.OOXML.dll.NPOI ...
- NPOI读取excel功能,兼容xls和xlsx
样例: IWorkbook workbook; string fileExt = Path.GetExtension(filePath); try { using (var file = new Fi ...
- JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
现在很多系统都有导出excel的功能,总结一下自己之前写的,希望能帮到其他人,这里我用的是XSSFWorkbook,我们项目在winsang 用的Tomcat,LInux上用的weblogic服务器, ...
- 打开Excel时提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致"
问题描述: 系统安装了WPS时,Analyzer导出excel时候,会提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致",这是Excel的安全问题, ...
- Excel导入工具类兼容xls和xlsx
package com.bj58.finance.platform.operation.provider.util; import org.apache.log4j.Logger; import or ...
随机推荐
- java:Oracle(聚合函数,多表查询,表之间的关系)
1.聚合函数 --max,min,sum,avg,count,nvl(,) -- max:最大值 -- max既能取数字的最大值,也可以取字符串的最大值(英文字母排列顺序),根据场景实际意义来看,最好 ...
- Day04:继承的意义(下)
对象转型 向上造型 什么是向上造型? 子类对象赋给父类引用. 父类引用指向子类对象. 子类转成父类 默认进行(父类引用指向子类对象). 为什么需要向上造型? 子类对象可以放入父类类型的数组中. 父类数 ...
- linux scp放后台执行方法
客户要搭建异地的容灾dg,压缩备份集500G,只能使用scp,前台跑经常超时,使scp放后台跑完成相关的文件传输: FULLBAK_LFCXJMYB_20190507_6448_1.DBFILE 10 ...
- 简述Vue中使用Vuex
1.为什么要用vuex 在vue组件通信的过程中,我们通信的目的往往就是在组件之间传递数据或组件的状态(这里将数据和状态统称为状态),进而更改状态.但可以看到如果我们通过最基本的方式来进行通信,一旦需 ...
- C#动态调用带有SoapHeader验证的WebServices
http://blog.csdn.net/u012995964/article/details/54573143 本文记录C#中通过反射动态的调用带有SoapHeader验证的WebServices服 ...
- c语言1作业07
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/9932 我在这个课程的目 ...
- python selenium中Excel数据维护(二)
接着python里面的xlrd模块详解(一)中我们我们来举一个实例: 我们来举一个从Excel中读取账号和密码的例子并调用: ♦1.制作Excel我们要对以上输入的用户名和密码进行参数化,使得这些数据 ...
- java中的多态关系的运用
1.多态发生的三个必备条件 继承.重写.父类引用指向子类对象 2.注意 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误:如果有,再去调用子类的同名方法. 方法的重写,也就是 ...
- 如何用item pipeline(管道)清洗数据
版权声明:本文为博主原创文章,转载请注明出处:如果博客中有错误之处抑或有可以改进的地方,欢迎在评论区留言. https://blog.csdn.net/f156207495/article/detai ...
- 说说 MicroPython 的项目整体架构
今天来说说 MicroPython 的架构情况,如果有必要我会做一些源码分析的文章供大家参考. 先来认识一下 MicroPython 整体情况,可以从软件的角度上去看待,首先我们拿到 MicroPyt ...