`
Luob.
  • 浏览: 1584389 次
  • 来自: 上海
社区版块
存档分类
最新评论

POIFSFileSystem解析Excel文件

    博客分类:
  • Java
阅读更多
1.上传省略
2.得到文件后,采用POIFSFileSystem 进行解析
/*** @return 批量调整用户财富
	 */
	public String batchRegulateMoneybag(){
	HttpServletRequest request=this.getRequest();
	 try {
		 if(file!=null){ //判断文件是否为空 不为空 就进行解析
			 
			 User sessionuser = (User) request.getSession(true).getAttribute(Constants.SESSION_USER);
			 //Excel 2003
			 if(file.getContentType()!=null && "application/vnd.ms-excel".equals(file.getContentType())){ 
				POIFSFileSystem poiFileSystem = new POIFSFileSystem(file.getInputStream());
				//得到文档对象
				HSSFWorkbook workbook = new HSSFWorkbook(poiFileSystem);
				//得到第一个表单
				HSSFSheet aSheet = workbook.getSheetAt(0);
				
				String msg="";
				if (aSheet == null) {
					logger.error("workbook.getSheetAt(0) is null!");
					msg="上传的文档中没有内容!";
					return SUCCESS;
				}
				//得到最后一行的 行号
				int lastRow = aSheet.getLastRowNum();
				if(lastRow > 5000){
					msg= "文档记录超过了5000条,请拆分文档,<B>拆分时请保证同一订单号的订单在一个文件里</B>";
					request.setAttribute("msg", msg);
					return SUCCESS;
				}
				//存放错误信息的集合
				List<String> errorList=new ArrayList<String>();
				 //从0 开始  跳过第一列(不处理表头)
				int amount=lastRow;
				//调整记录成功的条数 
				int samount=0;  
				//调整失败的记录数
				int famount=0; 
				
				//循环取出每行 然后 循环每一列
				for(int i=1;i<=lastRow;i++){
					HSSFRow row=aSheet.getRow(i); //得到 第 n 行
					int lastCell=row.getLastCellNum(); //得到 n行的总列数
					if(lastCell!=6){ //不是 6 的就有问题
						errorList.add("第【"+(row.getRowNum()+1)+"】行,总列数不正确!");
						famount++;
						continue; //结束这次循环
					}else{
						boolean flag=true; //默认是执行 调整的 如果 用户名为空就不执行了
						String [] params=new String[6]; //用户保存 一行记录中的 6个值
						for(int j=0;j<lastCell;j++){
							HSSFCell cell=	row.getCell(j); //得到每行  第 n列
							if(j==0 && cell==null){ //判断第一个用户名是否为空 如果为空 就跳出这次循环 不进行用户
								errorList.add("第【"+(row.getRowNum()+1)+"】行【"+(j+1)+"】列,用户名为空!");
								famount++;
								flag=false;
								break;
							}else{
								 String param= getCellValue(cell); //解析当前列的值
								 params[j]=param;
							}
						}
						if(flag){
							//经过上面的处理后 获取到每一行的 6个值  然后进行 修改 用户的财富
							int result=upUsermoneyBag(sessionuser,params);
							if(result==1){
								samount++;
							}else if(result==0){
								errorList.add("第【"+(row.getRowNum()+1)+"】行,调整财富失败!");
								famount++;
							}else if(result==-1){
								errorList.add("第【"+(row.getRowNum()+1)+"】行,用户名不存在!");
								famount++;
							}
						}
					}
				}
				request.setAttribute("amount", amount);
				request.setAttribute("famount", famount);
				request.setAttribute("samount", samount);
				request.setAttribute("errorList", errorList);
			 }
		  }
		} catch (Exception e) {
			e.printStackTrace();
		}
		return SUCCESS;
	}

解析每一列的数据
3.
/**
	 * @author LuoB.
	 * @return 得到当前列的值
	 */
	private String getCellValue(HSSFCell cell){
		String param="";
		if(cell==null){
			param="0";
		}else{
			int type=cell.getCellType();
			switch (type) {
			case 0:
				Double d=cell.getNumericCellValue();
				param=d.toString();
				break;
			case 1:
				param=cell.getStringCellValue();
				break;
			default:
				param="0";
				break;
			}
		}
		return param;
	}

4.使用上面的解析出来的数据
/**
	 * @param sessionuser 操作者
	 * @param params Excel表格中 一行的 6列值
	 * @return 1 成功  0 失败   -1 不存在这个用户
	 */
	private int upUsermoneyBag(User sessionuser,String [] params){
		try{
			if(params.length==6){
				BiUser user=iBiUserService.findBiUserByName(params[0]);
				Double cashback=Util.parseDouble(params[1]);
				/*String cstr=params[2];
				cstr=cstr.contains(".")?cstr.substring(0,cstr.indexOf(".")):cstr;*/
				Long credits=Util.parseLong(params[2]);
				Double nscashback=Util.parseDouble(params[3]);
				/*String nscstr=params[4];
				nscstr=nscstr.contains(".")?nscstr.substring(0,nscstr.indexOf(".")):nscstr;*/
				Long nscredits=Util.parseLong(params[4]);
				String note=params[5];
				if(user != null){
					BiMessage biMessage = new BiMessage();
					biMessage.setContent(sessionuser.getUsername()+"调整用户“"+user.getLoginname()+"”的财富,现金"+(cashback+nscashback)+",贝壳"+(credits+nscredits)+" 。用户的IP是"+user.getYahooim()+",用户最后登录时间"+MyUtils.getTimeString(user.getLastlogin()));
					biMessage.setTitle(user.getLoginname() + "调整财富提醒");
					biMessage.setType("sys");
					biMessage.setFromuser("系统");
					biMessage.setTouser("购物狂");
					biMessage.setTouserid(19717165l);
					biMessage.setDownflag("0");
					iMessageService.sendTextMsg(biMessage);
					iBiUserService.regulateMoneybag(user, cashback, credits,nscashback,nscredits, sessionuser.getUsername(), note);
					return 1;
				}
				else{
					return -1;
				}
			}
			return 0;
		}catch(Exception e){
			e.printStackTrace();
			return 0;
		}
	}


poi-3.6 不支持 2007 的excel 3.7 就可以了
2
0
分享到:
评论

相关推荐

    java解析excel源码

    Java解析Excel源码主要涉及到的是使用Java处理Microsoft Excel文件的技术,这一技术在数据处理、数据分析以及报表生成等场景中非常常见。在这个过程中,我们通常会使用Apache POI库,这是一个强大的开源API,专为...

    Java用poi读取excel文件

    然后,我们可以使用 `FileInputStream` 读取 Excel 文件,并使用 `POIFSFileSystem` 将其转换为 POI 可以识别的格式: ```java InputStream input = new FileInputStream("D:\\test.xls"); POIFSFileSystem fs = ...

    java解析Excel的POI框架

    【Java解析Excel的POI框架】是Apache Jakarta项目的一个组件,专门用于处理OLE2对象,尤其是Microsoft Excel文件。它的核心接口HSSF(Horrible Spreadsheet Format)提供了读取、写入和修改Excel文件的能力,使...

    javaexcel导入数据库.pdf

    代码中展示了如何使用`BufferedInputStream`读取Excel文件,然后使用`POIFSFileSystem`和`HSSFWorkbook`来解析Excel文件的内容。 - `BufferedInputStream`:提供缓冲功能,提高读取效率。 - `FileInputStream`:...

    使用POI读取excel文件内容.pdf

    - 使用 `POIFSFileSystem` 类来创建文件系统对象,然后通过这个对象创建 `HSSFWorkbook` 实例,从而可以访问 Excel 工作簿。 - `HSSFSheet` 的 `getSheetAt(0)` 方法获取第一个工作表,假设标题在第一行。 - `...

    java 生成写入excel文件.pdf

    Java生成写入Excel文件是常见的数据导出需求,特别是在企业级应用中,如报表生成、数据分析等场景。在Java中,我们通常使用Apache POI库来处理Microsoft Office格式的文件,包括Excel。以下是对给定代码段的详细解析...

    java编程excel导入MySQL.pdf

    2. Excel数据处理:处理Excel文件涉及到读取和解析Excel文件中的数据。在文件中提到使用了POI库来处理Excel文件,具体是用到了POI中的HSSFWorkbook类来读取Excel文件。HSSFWorkbook是处理Excel 2007之前版本文件的一...

    java操作excel类

    在IT领域,尤其是企业级应用开发中,处理Excel文件是常见的需求之一。Java作为广泛使用的编程语言,提供了多种库来实现对Excel文件的读写操作,其中较为流行的有Apache POI和JExcelAPI(jxl)。下面将详细解析基于...

    excel.导出导入

    `POIFSFileSystem`是Apache POI提供的用于处理Excel文件的类,它能够处理`.xls`格式的文件。接下来,通过`HSSFWorkbook`类加载工作簿对象,该对象代表了一个Excel文件。 ### 二、获取Excel中的数据 ```java ...

    Java 读取excel 文件流代码实例

    在示例代码中,我们首先使用 `FileInputStream` 获取 Excel 文件流,然后使用 `POIFSFileSystem` 将其解析为一个Workbook 对象。接着,我们可以使用 `HSSFWorkbook` 对象来获取 Excel 文件的所有Sheet。 遍历所有 ...

    excel导入

    本文档将详细讲解如何使用Java语言来完成这一过程,包括读取Excel文件、解析Excel内容、以及将解析后的数据导入数据库的具体步骤。 #### 二、技术栈 1. **Java**: 编程语言。 2. **Apache POI**: 用于读写...

    Java实现批量导入excel表格数据到数据库中的方法

    我们可以使用HSSFListener接口来解析Excel文件内容,该接口提供了许多方法来处理Excel文件的记录,例如processRecord()方法可以处理Excel文件的记录。 5. 将数据导入到数据库 最后,需要将解析后的数据导入到...

    java_poi导入EXCEL详细操作

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于...通过这些步骤,你可以实现Java程序对Excel文件的完整解析和数据导入。根据实际需求,你还可以扩展功能,比如写入数据到Excel、处理更复杂的单元格格式等。

    poi读取excel

    这里定义了三个构造函数,第一个构造函数接受一个输入流 `InputStream` 参数,并创建一个 `POIFSFileSystem` 对象来读取 Excel 文件,然后通过这个对象创建一个 `HSSFWorkbook` 工作簿实例。如果在创建过程中发生...

    java实现excel导入导出.pdf

    这两个库都提供了对Microsoft Excel文件的读写支持,但POI库功能更强大,支持更多的Excel版本和特性。 1. **jxl 库**: - `jxl` 是一个轻量级的库,适用于简单的Excel操作,如创建、读取和修改工作表。在上述代码...

    java 数据导入导出excel

    同样地,Apache POI 提供了读取 Excel 文件的功能,通过解析文件中的数据,可以将其导入到数据库中。 ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel....

    java读取excel表中数据(带注释)

    本文将详细介绍如何使用Java及Apache POI库来读取Excel文件中的数据,并提供一段示例代码及其注释解析。 #### 二、准备工作 在开始编写代码之前,我们需要做一些准备工作: 1. **下载并导入POI包**:Apache POI是一...

Global site tag (gtag.js) - Google Analytics