当前位置: 首页 > news >正文

javaweb之动态读excel,导入excel,poi,jxl 支持判断2003.2007及以上

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

今天发现之前的那个导入有问题,只是支持2003,并没有支持2007及以上版本。poi 是支持目前excel的所有

版本的。只不过不同版本所使用的读取方法名不一样

也是发现网上很多的都是博文都是没有判断版本的,包括我之前借鉴的文章。

File file = new File(path);
getData(file, 0); //path是路径,

重要代码

public String[][] getData(File file, int ignoreRows)
			throws FileNotFoundException, IOException {
		List<String[]> result = new ArrayList<String[]>();
		int rowSize = 0;
		BufferedInputStream in = new BufferedInputStream(new FileInputStream(
				file));

		// 打开HSSFWorkbook
//		POIFSFileSystem fs = new POIFSFileSystem(in);
//		HSSFWorkbook wb = new HSSFWorkbook(fs);
//		HSSFCell cell = null; 

//		HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls
//		XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx
//		Workbook wb = null;   
		
		int excel=0;
		InputStream inp= in; 
		if(! inp.markSupported()) {
		inp = new PushbackInputStream(inp, 8);
		}

		if(POIFSFileSystem.hasPOIFSHeader(inp)) {
		System.out.println("2003及以下");
		  excel=2;
		}
		if(POIXMLDocument.hasOOXMLHeader(inp)) {
		System.out.println("2007及以上");
		 	excel=3;
		}
		 
//		if (!path.endsWith(".xls")) {
//			excel =1;
//		}  
//		
		 if(excel==2){
		   POIFSFileSystem fs = new POIFSFileSystem(in);
			HSSFWorkbook wb = new HSSFWorkbook(fs);
			HSSFCell cell = null; 
			Map<Object, Object> headMap = new HashMap<Object, Object>();
			inputID=0;
			for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
	 
				HSSFSheet st = wb.getSheetAt(sheetIndex);// 不取0行 表头
				// 第一行为标题,不取
				for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {// 不算标题  的行数   st.getLastRowNum()不算表头的数目
					HSSFRow row = st.getRow(rowIndex);
				
					if (row == null) {
						continue;
					}
					addressList = new AddressList(); 
					
					boolean _b = false;
					for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { // 循环列
						cell = row.getCell(columnIndex); 
						String sb="";
						if (cell != null&&!cell.equals("")) {  
							DecimalFormat df = new DecimalFormat("0");// 格式化 number String字符
							switch (cell.getCellType()) {
							
							case HSSFCell.CELL_TYPE_STRING://String

								sb = cell.getStringCellValue();

								break;
								
							case HSSFCell.CELL_TYPE_NUMERIC:      //数字
		                    	  sb = df.format(cell.getNumericCellValue());  //将科学计数的转换                             
		                         break;
							case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值

								if (!cell.getStringCellValue().equals("")) {

									sb = cell.getStringCellValue();

								} else {

									sb = cell.getNumericCellValue() + "";

								}

								break;

							case HSSFCell.CELL_TYPE_BLANK:  //空值

								break;

							case HSSFCell.CELL_TYPE_ERROR:  //异常类型直接空

								sb = "";

								break;

							case HSSFCell.CELL_TYPE_BOOLEAN:  //布尔类型

								sb = (cell.getBooleanCellValue() == true ? "Y"

								: "N");

								break;

							default:

								sb = "";

		                     }

						String value=sb;
						//String value = cell.toString().trim();
							if (rowIndex == 0) {
								if (value.toString().equals("姓名")) {
									headMap.put(columnIndex, "name");
								}else if (value.toString().equals("职务")) {
									headMap.put(columnIndex, "zhiwu");
								} 
								else if (value.toString().equals("办公室电话")) {
									headMap.put(columnIndex, "oph");
								} else if (value.toString().equals("手机号码")) {
									headMap.put(columnIndex, "tel");
								} else if (value.toString().equals("传真")) {
									headMap.put(columnIndex, "fax");
								} else if (value.toString().equals("邮箱")) {
									headMap.put(columnIndex, "emall");
								} 
								else if (value.toString().equals("生日")) {
								 headMap.put(columnIndex, "birthday"); 
								 }
								else if (value.toString().equals("地址")) {
									headMap.put(columnIndex, "address");
								} else if (value.toString().equals("说明")) {
									headMap.put(columnIndex, "comments");
								} else if (value.toString().equals("性别")) {
									headMap.put(columnIndex, "sex");
								}
								
							} else {
								if (headMap.get(columnIndex) != null) {
									String _value = headMap.get(columnIndex).toString();
									if (_value.equals("name")) {
										_b = true;
										addressList.setName(value);
									}else if (_value.equals("zhiwu")) {
										_b = true;									
										String abc = jdbc.GetObject("select id from Code where codeName like '"+value+"'", "id");	
										if(abc==null||abc==""){
											abc="0";
										}
										addressList.setZhiwu(Integer.parseInt(abc)); 
									}
									else if (_value.equals("oph")) {
										_b = true;
										addressList.setOph(value);
									} else if (_value.equals("tel")) {
										_b = true; 
										addressList.setTel(value);
									} else if (_value.equals("fax")) {
										_b = true; 
										addressList.setFax(value);
									} else if (_value.equals("emall")) {
										_b = true;
										addressList.setEmall(value);
									} else if (_value.equals("sex")) {
										_b = true;
										if (value.toString().equals("男")) {
											value = "0";
										} else {
											value = "1";
										}
										addressList.setSex(Integer.parseInt(value));
									} 
									else if (_value.equals("birthday")) {
										_b = true;
										if(value!=null&&!value.equals("")){
										SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
										Date date = null;									
										try {
											
											date = sdf.parse(value);
											addressList.setBirthday(date);
											
										} catch (ParseException e) {
											// TODO Auto-generated catch block
											//e.printStackTrace(); 
											addressList.setBirthday(null);
										}		
										}else{
											addressList.setBirthday(null);
										} 
									} 
									else if (_value.equals("address")) {
										_b = true;
										addressList.setAddress(value);
									}
									else if (headMap.get(columnIndex).toString()
											.equals("comments")) {
										_b = true;
										addressList.setComments(value);
									}

								}
							}
						}

					}
					
					if (_b) {  
						addressList.setPid(pid);
						addressList.setType(type);
						addressList.setUserid(userid);
						addressList.setSort(0);
						addressListService.save(addressList);   //
						inputID++;
						 
					}  
					
					 
				}
				 System.out.println("wwwwwwwwwwww "+inputID);
			}
			in.close();
			String[][] returnArray = new String[result.size()][rowSize];
			for (int i = 0; i < returnArray.length; i++) {
				returnArray[i] = (String[]) result.get(i);
			}
			 return returnArray;
			
		 }else{
			 FileInputStream input = new FileInputStream(new File(path));  //读取的文件路径   
	          XSSFWorkbook wb = new XSSFWorkbook(new BufferedInputStream(input));   
	          XSSFCell cell = null; 
	      	// 根据不同的data放置不同的表头
	  		Map<Object, Object> headMap = new HashMap<Object, Object>();
	  		inputID=0;
	  		for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
	   
	  			XSSFSheet st = wb.getSheetAt(sheetIndex);// 不取0行 表头
	  			// 第一行为标题,不取
	  			for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {// 不算标题  的行数   st.getLastRowNum()不算表头的数目
	  				XSSFRow row = st.getRow(rowIndex);
	  			
	  				if (row == null) {
	  					continue;
	  				}
	  				addressList = new AddressList(); 
	  				
	  				boolean _b = false;
	  				for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { // 循环列
	  					cell = row.getCell(columnIndex); 
	  					String sb="";
	  					if (cell != null&&!cell.equals("")) {  
	  						DecimalFormat df = new DecimalFormat("0");// 格式化 number String字符
	  						switch (cell.getCellType()) {
	  						
	  						case HSSFCell.CELL_TYPE_STRING://String

	  							sb = cell.getStringCellValue();

	  							break;
	  							
	  						case HSSFCell.CELL_TYPE_NUMERIC:      //数字
	  	                    	  sb = df.format(cell.getNumericCellValue());  //将科学计数的转换                             
	  	                         break;
	  						case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值

	  							if (!cell.getStringCellValue().equals("")) {

	  								sb = cell.getStringCellValue();

	  							} else {

	  								sb = cell.getNumericCellValue() + "";

	  							}

	  							break;

	  						case HSSFCell.CELL_TYPE_BLANK:  //空值

	  							break;

	  						case HSSFCell.CELL_TYPE_ERROR:  //异常类型直接空

	  							sb = "";

	  							break;

	  						case HSSFCell.CELL_TYPE_BOOLEAN:  //布尔类型

	  							sb = (cell.getBooleanCellValue() == true ? "Y"

	  							: "N");

	  							break;

	  						default:

	  							sb = "";

	  	                     }

	  					String value=sb;
	  					//String value = cell.toString().trim();
	  						if (rowIndex == 0) {
	  							if (value.toString().equals("姓名")) {
	  								headMap.put(columnIndex, "name");
	  							}else if (value.toString().equals("职务")) {
	  								headMap.put(columnIndex, "zhiwu");
	  							} 
	  							else if (value.toString().equals("办公室电话")) {
	  								headMap.put(columnIndex, "oph");
	  							} else if (value.toString().equals("手机号码")) {
	  								headMap.put(columnIndex, "tel");
	  							} else if (value.toString().equals("传真")) {
	  								headMap.put(columnIndex, "fax");
	  							} else if (value.toString().equals("邮箱")) {
	  								headMap.put(columnIndex, "emall");
	  							} 
	  							else if (value.toString().equals("生日")) {
	  							 headMap.put(columnIndex, "birthday"); 
	  							 }
	  							else if (value.toString().equals("地址")) {
	  								headMap.put(columnIndex, "address");
	  							} else if (value.toString().equals("说明")) {
	  								headMap.put(columnIndex, "comments");
	  							} else if (value.toString().equals("性别")) {
	  								headMap.put(columnIndex, "sex");
	  							}
	  							
	  						} else {
	  							if (headMap.get(columnIndex) != null) {
	  								String _value = headMap.get(columnIndex).toString();
	  								if (_value.equals("name")) {
	  									_b = true;
	  									addressList.setName(value);
	  								}else if (_value.equals("zhiwu")) {
	  									_b = true;									
	  									String abc = jdbc.GetObject("select id from Code where codeName like '"+value+"'", "id");	
	  									if(abc==null||abc==""){
	  										abc="0";
	  									}
	  									addressList.setZhiwu(Integer.parseInt(abc)); 
	  								}
	  								else if (_value.equals("oph")) {
	  									_b = true;
	  									addressList.setOph(value);
	  								} else if (_value.equals("tel")) {
	  									_b = true; 
	  									addressList.setTel(value);
	  								} else if (_value.equals("fax")) {
	  									_b = true; 
	  									addressList.setFax(value);
	  								} else if (_value.equals("emall")) {
	  									_b = true;
	  									addressList.setEmall(value);
	  								} else if (_value.equals("sex")) {
	  									_b = true;
	  									if (value.toString().equals("男")) {
	  										value = "0";
	  									} else {
	  										value = "1";
	  									}
	  									addressList.setSex(Integer.parseInt(value));
	  								} 
	  								else if (_value.equals("birthday")) {
	  									_b = true;
	  									if(value!=null&&!value.equals("")){
	  									SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	  									Date date = null;									
	  									try {
	  										
	  										date = sdf.parse(value);
	  										addressList.setBirthday(date);
	  										
	  									} catch (ParseException e) {
	  										// TODO Auto-generated catch block
	  										//e.printStackTrace(); 
	  										addressList.setBirthday(null);
	  									}		
	  									}else{
	  										addressList.setBirthday(null);
	  									} 
	  								} 
	  								else if (_value.equals("address")) {
	  									_b = true;
	  									addressList.setAddress(value);
	  								}
	  								else if (headMap.get(columnIndex).toString()
	  										.equals("comments")) {
	  									_b = true;
	  									addressList.setComments(value);
	  								}

	  							}
	  						}
	  					}

	  				}
	  				
	  				if (_b) {  
	  					addressList.setPid(pid);
	  					addressList.setType(type);
	  					addressList.setUserid(userid);
	  					addressList.setSort(0);
	  					addressListService.save(addressList);   //
	  					inputID++;
	  					 
	  				}  
	  				
	  				 
	  			}
	  			 System.out.println("wwwwwwwwwwww "+inputID);
	  		}
	  		in.close();
	  		String[][] returnArray = new String[result.size()][rowSize];
	  		for (int i = 0; i < returnArray.length; i++) {
	  			returnArray[i] = (String[]) result.get(i);
	  		}
	  		 
	  		 System.out.println("zzzzzzzzzzzzzzz "+inputID);
	  		 return returnArray;
		 }
		
		
	 
	}

	/**
	 * 去掉字符串右边的空格
	 * 
	 * @param str
	 *            要处理的字符串
	 * @return 处理后的字符串
	 */
	public static String rightTrim(String str) {
		if (str == null) {
			return "";
		}
		int length = str.length();
		for (int i = length - 1; i >= 0; i--) {
			if (str.charAt(i) != 0x20) {
				break;
			}
			length--;
		}
		return str.substring(0, length);
	}


转载于:https://my.oschina.net/u/2299924/blog/516866

相关文章:

  • iOS如何兼容的应用程序32位系统和64Bit系统
  • linux下实时查看tomcat运行日志
  • C#中对象的销毁有三种方式Finalize,Dispose,GC。
  • shrio教程初级(八)shiro验证码与记住登录
  • 转载blog_Linux下Tomcat日志定期清理 及 logrotate 配置
  • Android Fragment间对象传递
  • windows下sublime text的node.js开发环境搭建
  • 关于PHP设计模式的分析和理解
  • ibatis设置启用及关闭命名空间
  • struts1和struts2的区别对比
  • HA集群之三:corosync+pacemaker实现httpd服务的高可用(crm的用法)
  • VmWare10 32位安装CentOS7遇到的问题及解决办法
  • 百度地图查询数据结果
  • AngularJs angular.element
  • CUDA学习笔记(五)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • C++11: atomic 头文件
  • CentOS7简单部署NFS
  • css系列之关于字体的事
  • CSS中外联样式表代表的含义
  • ES6--对象的扩展
  • extract-text-webpack-plugin用法
  • Java应用性能调优
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mysql外键的使用
  • PAT A1017 优先队列
  • Phpstorm怎样批量删除空行?
  • Spring框架之我见(三)——IOC、AOP
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue学习第二天
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 聊聊sentinel的DegradeSlot
  • 使用Swoole加速Laravel(正式环境中)
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 探索 JS 中的模块化
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​马来语翻译中文去哪比较好?
  • # 达梦数据库知识点
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)scrum常见工具列表
  • (转)setTimeout 和 setInterval 的区别
  • (转)visual stdio 书签功能介绍
  • (转)可以带来幸福的一本书
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET 命令行参数包含应用程序路径吗?
  • .NET国产化改造探索(一)、VMware安装银河麒麟