`
Mint_Grass
  • 浏览: 63124 次
  • 性别: Icon_minigender_1
  • 来自: 新疆
社区版块
存档分类
最新评论

POI 写的excel导入通用方法(附带jquery的ajaxfileupload上传excel文件)

阅读更多
1.jsp使用jquery的ajaxfileupload插件

function importExcel(){
		if(CheckForTestFile()){
			var nwOfficeId = jQuery('#nwOfficeId')[0].value;
			$.ajaxFileUpload({
                url:'${pageContext.request.contextPath}/juasum.do?method=importExcel',             //需要链接到服务器地址
                secureuri:false,
                fileElementId:'fileUpload',                   //文件选择框的id属性
                dataType: 'text',                             //服务器返回的格式,可以是json
                data:{nwOfficeId:nwOfficeId},
                success: function (data, status) {   
                	 $('#result').html(data).attr("class",'error');
                },
                error: function (data, status, e){
               		 $('#result').html("上传失败!").attr("class",'error');
                }
              }
            );

		}
	}


只有部分代码 详细的请baidu jquery ajaxfileupload

2.action  struts1的做法
response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		FormFile[] f = (FormFile[])dynaMap.get("fileUpload");
		try {
			POIFSFileSystem in = new POIFSFileSystem(f[0].getInputStream());
			//有效数据总共9列
			Map<Integer, Map<Integer, List<String>>> map = ExcelMap.getExcel(in, 9);
			//导入数据从第3行开始
			String res = ssoUserService.importExcel(map.get(0),3,Integer.parseInt(dynaMap.get("nwOfficeId")+""));
			if("success".equals(res)){
				out.print("导入成功!");
			}else{
				out.print(res);
			}
			out.flush();
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} 
		return null;


3.service
	public String importExcel(Map<Integer, List<String>> map, int i, int nwOfficeId) {
		String res = "";
		Map<String, Integer> map1 = new HashMap<String, Integer>();
		for (Entry<Integer, List<String>> ent : map.entrySet()) {
			String login_name = ent.getValue().get(0);
			if(map1.containsKey(login_name)){
				res = "第"+map1.get(login_name)+"行第1列与第"+(ent.getKey()+1)+"行第1列重复";
				return res;
			}else{
				map1.put(login_name, ent.getKey()+1);
			}
		}
		List<SSOUser> ssoUserlist = new ArrayList<SSOUser>();
		SSOUser ssoUser = null;
		List<String> list = null;
		for (Entry<Integer, List<String>> ent : map.entrySet()) {
			if(ent.getKey()>=i-1){
				ssoUser = new SSOUser();
				list = ent.getValue();
				String username = list.get(0);      //用户名
				String nickname = list.get(1);      //昵称
				String email = list.get(2);         //邮箱
				String sex = list.get(3);           //性别
				String regDate = list.get(4);       //注册时间
				String phone = list.get(5);         //电话
				String age = list.get(6);           //年龄
				String address = list.get(7);       //地址
				String postcode = list.get(8);      //邮编
				if("".equals(username)){
					res = "第"+(ent.getKey()+1)+"行,第1列格式错误";
					return res;
				}else{
					username = nwOfficeId+"-"+username;
					int count = ssoUserDao.countSSOUserByLoginName(username);
					if (count > 0) {
						res = "第"+(ent.getKey()+1)+"行,第1列用户名重复";
						return res;
					} else {
						ssoUser.setLoginName(username);
					}
				}
				if("".equals(nickname)){
					res = "第"+(ent.getKey()+1)+"行,第2列格式错误";
					return res;
				}else{
					ssoUser.setNickname(nickname);
				}
				//判断邮箱格式
				if(!email.matches("^([\\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\\.[a-zA-Z0-9_-]+)+{1}quot;)){
					res = "第"+(ent.getKey()+1)+"行,第3列格式错误";
					return res;
				}else{
					ssoUser.setEmail(email);
				}
				//判断性别
				if("男".equals(sex)){
					ssoUser.setSex(0);
				}else if("女".equals(sex)){
					ssoUser.setSex(1);
				}else{
					res = "第"+(ent.getKey()+1)+"行,第4列格式错误";
					return res;
				}
				//判断注册时间
				if("".equals(regDate)){
					res = "第"+(ent.getKey()+1)+"行,第5列格式错误";
					return res;
				}else{
					if(!regDate.matches("^\\w{3}\\s\\w{3}\\s\\d{2}\\s(\\d{2}\\:){2}\\d{2}\\sCST\\s\\d{4}{1}quot;)){
						res = "第"+(ent.getKey()+1)+"行,第5列格式错误";
						return res;
					}else{
						SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss 'CST' yyyy", Locale.US); 
						try {
							ssoUser.setRegDate(sdf.parse(regDate));
						} catch (ParseException e) {
							e.printStackTrace();
						}
					}
				}
				Map<String, String> metadata = new HashMap<String,String>();
				//判断电话格式
				String phone_res = getFormat(phone,"^([0-9]{3,4}\\-)?[0-9]{7,8}$|^[0-9]{11}{1}quot;);
				if("error".equals(phone_res)){
					res = "第"+(ent.getKey()+1)+"行,第6列格式错误";
					return res;
				}else{
					metadata.put("phone", phone_res);
				}
				//判断年龄格式
				String age_res = getFormat(age,"^\\d{1,3}{1}quot;);
				if("error".equals(age_res)){
					res = "第"+(ent.getKey()+1)+"行,第7列格式错误";
					return res;
				}else{
					metadata.put("age", age_res);
				}
				metadata.put("address", address);
				//判断邮编格式
				String postcode_res = getFormat(postcode,"^[1-9]\\d{5}{1}quot;);
				if("error".equals(postcode_res)){
					res = "第"+(ent.getKey()+1)+"行,第9列格式错误";
					return res;
				}else{
					metadata.put("yb", postcode_res);
				}
				ssoUser.setMetadata(metadata);
				ssoUser.setNwOfficeId(nwOfficeId);
				ssoUserlist.add(ssoUser);
			}
		}
		int m = ssoUserDao.save(ssoUserlist);
		System.out.println(m);
		return "success";
	}


4.将上传的excel转换成map(公用部分,适用于所有模板)
/***
	 * 
	 * @param in   POIFSFileSystem
	 * @param max  所导入excel的列数
	 * @return map
	 * @throws IOException
	 */
	public static Map<Integer, Map<Integer, List<String>>> getExcel(POIFSFileSystem in,int max)
			throws IOException {
		Map<Integer, Map<Integer, List<String>>> map = new HashMap<Integer, Map<Integer, List<String>>>();// 总map
		Map<Integer, List<String>> sheetMap = null;// 每个sheet的map
		List<String> list = null;// 每行一个list
		HSSFWorkbook workBook = null;
		try {
			workBook = new HSSFWorkbook(in);
		} catch (final Exception e) {
			throw new IOException("读取上传文件失败");
		}
		/**
		 * 获得Excel中工作表个数
		 */
		// sheet.autoSizeColumn(( short ) 0 );//导出自动适应宽度
		int sheetSize = workBook.getNumberOfSheets();
//		System.out.println("工作表个数 :" + sheetSize);
		for (int i = 0; i < sheetSize; i++) {
			sheetMap = new HashMap<Integer, List<String>>();
//			System.out.println("工作表名称:" + workBook.getSheetName(i));
			HSSFSheet sheet = workBook.getSheetAt(i);
			int rows = sheet.getPhysicalNumberOfRows(); // 获得行数
			if (rows > 0) {
				for (int j = 0; j < rows; j++) { // 行循环
					list = new ArrayList<String>();
					HSSFRow row = sheet.getRow(j);
					if (row != null) {
						int cells = row.getLastCellNum();// 获得列数
						if(cells<max){
							cells = max;
						}
						for (short k = 0; k < cells; k++) { // 列循环
							HSSFCell cell = row.getCell(k);
							String value = "";
							if(cell != null){
								switch (cell.getCellType()) {
								case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
									if (HSSFDateUtil.isCellDateFormatted(cell)) {
										// 如果是date类型则 ,获取该cell的date值
										value = HSSFDateUtil.getJavaDate(
												cell.getNumericCellValue())
												.toString();
									} else {// 纯数字
										value = String.valueOf(cell
												.getNumericCellValue());
									}
									if(value.matches("^((\\d+\\.?\\d+)[Ee]{1}(\\d+)){1}quot;)){
										DecimalFormat df = new DecimalFormat("#.##");
										value = df.format(Double.parseDouble(value));
									}
									break;
								case HSSFCell.CELL_TYPE_STRING: // 字符串型
									value = cell.getRichStringCellValue()
											.toString().trim();
									break;
								case HSSFCell.CELL_TYPE_FORMULA:// 公式型
									// 读公式计算值
									value = String.valueOf(cell
											.getNumericCellValue());
									if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
										value = cell.getRichStringCellValue()
												.toString();
									}
									break;
								case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔
									value = "" + cell.getBooleanCellValue();
									break;
								/* 此行表示该单元格值为空 */
								case HSSFCell.CELL_TYPE_BLANK: // 空值
									value = "";
									break;
								case HSSFCell.CELL_TYPE_ERROR: // 故障
									value = "";
									break;
								default:
									value = cell.getRichStringCellValue()
											.toString().trim();
								}
							}
							list.add(value);
						}
						if(!isAllNull(list)){
							sheetMap.put(j, list);
						}
					}
				}
			}
			map.put(i, sheetMap);
		}
		return map;
	}
	/**
	 * 如果list里面的值全为空 则范围true 反之则为false
	 * @param l list
	 * @return
	 */
	private static boolean isAllNull(List<String> l){
		int i=0;
		for(String s : l){
			if(!"".equals(s)){
				i++;
			}
		}
		if(i>0){
			return false;
		}
		return true;
	}
	
	public static void main(String[] args) {
		String filePath = "d:/template.xls";
		try {
			POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath)); 
			Map<Integer, Map<Integer, List<String>>> map = getExcel(fs,9);
			for(Entry<Integer, List<String>> ent : map.get(0).entrySet()){
				System.out.println(ent);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}


本版本采用poi-3.6-20091214.jar jar包
excel2003 2007均适用

转自: http://blog.csdn.net/cbxjj/article/details/6890351
分享到:
评论

相关推荐

    POI实现Excel导入导出并附带加载进度条

    Apache POI是一个强大的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx, .xls)。本项目通过Apache POI实现了Excel的导入与导出功能,并在操作过程中加入了进度条展示,...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    POI实现excel导入导出

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在本文中,我们将深入探讨如何使用Apache POI库实现Excel的导入和导出功能,这对于处理大量数据和自动化办公...

    Java poi 实现excel导入导出

    在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,尤其是Excel(.xlsx 和 .xls)文件。本教程将深入探讨如何利用Java POI库来实现Excel的导入与导出...

    基于poi的excel导入.doc

    "POI导入Excel知识点" POI简介 Apache POI是一个开源的Java库,用于处理Microsoft Office文档,包括Excel、Word、PowerPoint等。POI提供了一个纯Java的解决方案,用于读取、写入和操作Office文档。 POI中的Excel...

    java_poi导入excel通用工具类V0915

    "java_poi导入excel通用工具类V0915" 提供了一种通用的方式来处理Excel数据的导入工作,它支持多种赋值方式,包括单个对象、列表对象以及指定坐标的赋值。 首先,让我们深入理解一下这个工具类的主要功能: 1. **...

    poi作excel导入数据库

    标题中的“poi作excel导入数据库”指的是使用Apache POI库来读取Excel文件,并将数据存储到数据库中。Apache POI是Java平台上的一个开源项目,它提供了处理Microsoft Office格式文档的能力,包括Excel(.xls和.xlsx...

    java_poi导入excel通用工具类

    这个"java_poi导入excel通用工具类"是利用Java的POI库和一些额外的技术来实现对Excel数据的导入功能,使得开发人员能够方便地将Excel数据转化为Java对象或者对已有对象进行填充。下面我们将深入探讨相关的知识点。 ...

    POI导入Excel并返回校验后的错误文件(原样)下载以及校验错误信息,同时加进度条

    POI导入Excel并返回校验后的错误文件(原样数据文件,并添加批注,注:由于批注只能加1000条,会在Excel后面添加一栏错误信息)下载以及页面展示校验错误信息,同时添加导入进度条,提供页面js和css代码,后端...

    Java 使用poi导入excel 并使用xml做数据验证

    Apache POI是一个流行的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx, .xls)。在本项目中,我们结合了POI库和XML技术来实现Excel数据的验证与导入数据库。 首先,...

    poi读写excel

    poi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excel

    Springboot+Poi实现Excel的导入导出

    5. **安全考虑**:在处理用户上传的Excel文件时,需要防止SQL注入等安全问题。对输入数据进行验证和过滤,确保数据的合法性。 总之,"Springboot+Poi实现Excel的导入导出"项目结合了多种强大的工具,提供了一种高效...

    POI技术将excel解析导入mysql.pdf

    根据提供的文件信息,可以看出文档主要阐述了如何使用Apache POI技术解析2003-2007版本的Excel文档,并将解析后的数据导入到MySQL数据库中。文档中分别涉及到Java实体类的设计(User.java),以及数据访问层的设计...

    poi读写excel+poi总结

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。在本文中,我们将深入探讨如何使用POI进行Excel的读写操作,并进行总结。 1. POI基本概念 Apache POI 提供了...

    POI导出Excel文件

    Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作...

    SpringBoot整合poi实现Excel文件的导入和导出.pdf

    在SpringBoot项目中,我们经常需要处理Excel文件的导入与导出功能,这在数据分析、数据交换等场景中尤其常见。Apache POI 是一个流行的Java库,它允许开发者读写Microsoft Office格式的文件,包括Excel。下面我们将...

    poi导入导出Excel通用工具类 兼容xls,xlsx

    总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...

    poi excel导入导出

    总结,Apache POI 提供了强大的API,使得Java开发者可以轻松地处理Excel文件的导入与导出,包括读取、写入、样式设置、公式计算和图表创建等功能。在实际项目中,根据需求灵活运用这些功能,可以实现高效的Excel数据...

    POI读写excel文件+poi简单文档

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel。这个库使得在Java应用程序中创建、修改和读取Excel文件变得非常容易。在这个“POI读写excel文件+poi简单文档”中,我们将深入...

Global site tag (gtag.js) - Google Analytics