`
tracy婷婷
  • 浏览: 24274 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

poi读取excel2007

    博客分类:
  • Java
阅读更多
   HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls

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

   对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。

    org.apache.poi.openxml4j.exceptions.InvalidOperationException

    org.apache.poi.poifs.filesystem.OfficeXmlFileException

 

package com.tonicare.service.mgmt.sales;

import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.struts2.components.Else;
 

import com.tonicare.action.mgmt.sales.vo.SalesTmallStoreOrderVo;
import com.tonicare.data.bean.CsStoreDate;
import com.tonicare.data.bean.LmProduct;
import com.tonicare.data.dao.SalesTMallDao;
import com.tonicare.framework.layer.MgmtService;
import com.tonicare.framework.layer.TonicareException;
import com.tonicare.framework.layer.AjaxResultVo.StatusCode;
import com.tonicare.util.BeanFactory;
import com.tonicare.util.Config;
import com.tonicare.util.Const;
import com.tonicare.util.LogHelper;

public class SalesTmallStoreOrderService extends MgmtService {

	@Override
	public Object invoke(Object inData) throws TonicareException {
		// TODO Auto-generated method stub
		SalesTmallStoreOrderVo vo=(SalesTmallStoreOrderVo) inData;
		if (Const.OPERATE_UPLOAD.equals(vo.getOpType())) {
			if (Config.DEBUG) {
				LogHelper.info("ExcelFileName=" + vo.getExcelFileName() + "\tExcelContentType=" + vo.getExcelContentType() + "\tExcel.AbsolutePath=" + vo.getExcel().getAbsolutePath());
				vo.getAjaxResult().init(StatusCode.error);
				vo.getAjaxResult().setMessage("文件 " + vo.getExcelFileName() + "导入失败!");
			}
				
			if (vo.getExcel()!=null) {
				Date now = new Date();
				String fileName = DateFormatUtils.format(now, Const.TIME_FORMAT_NUMBER);
				int records= this.readExcel(vo.getExcel(), fileName,vo);
				vo.getAjaxResult().init(StatusCode.ok);
				vo.getAjaxResult().setMessage("文件 " + vo.getExcelFileName() + "(" + records + "条订单) 导入成功!");
			}
		}	
		return null;
	}
	
	public int readExcel(File aExcel, String aFile,SalesTmallStoreOrderVo vo) throws TonicareException{
		int number=0;
		FileInputStream ins=null;
		try {
			Map<Long,LmProduct> maps=this.getProductsBymap();
			SalesTMallDao dao=(SalesTMallDao) BeanFactory.getDao(Const.DAO_SALES_SALESTMALLDAO);
			
			ins=new FileInputStream(aExcel);
			XSSFWorkbook xb=new XSSFWorkbook(ins);//通过得到的文件流 创建一个HSSFWorkbook对象
			XSSFSheet sheet=xb.getSheetAt(0);
			int rows=sheet.getPhysicalNumberOfRows();
			XSSFRow row=null;
			//遍历
			for(int i=1;i<=rows;i++){
				row=sheet.getRow(i);	
				if (row == null) {
					   continue;
				 }
				String sDate=vo.getStoredate().toString();
				String aId=String.valueOf(this.getCell(row.getCell(3)));
				
				List<CsStoreDate> store=dao.getCsStoreDateByDateAndID(sDate,aId, null, null);
				
				CsStoreDate storebean=null;
				if(store==null || store.size()<=0){
					 storebean=new CsStoreDate();
				}else{
					storebean=store.get(0);
					storebean.setId(store.get(0).getId());
				}	
				
				storebean.setStoreDate(DateUtils.parseDate(vo.getStoredate(), Const.DEFAULT_DATE_FORMAT_ARRAY));//选择的时间
				storebean.setStoreCode(vo.getShopid());//商超编码	
				storebean.setStoreName(String.valueOf(this.getCell(row.getCell(1))));//商超名称	
				if(this.getCell(row.getCell(2))==null || this.getCell(row.getCell(2)).equals("")){
					storebean.setWarehouse(null);//仓库
				}else{
					storebean.setWarehouse(String.valueOf(this.getCell(row.getCell(2))));//仓库
				}	
				storebean.setProductId(String.valueOf(this.getCell(row.getCell(3))));//商品编码
				storebean.setSkuId(null);//sku编码String.valueOf(this.getCell(row.getCell(4)))
				storebean.setProductName(String.valueOf(this.getCell(row.getCell(5))));//商品名称
				
				if(this.getCell(row.getCell(7))==null || this.getCell(row.getCell(7)).equals("")){
					storebean.setSupplierCode(null);//供应商id
				}else{
					storebean.setSupplierCode(Integer.valueOf(String.valueOf(this.getCell(row.getCell(7)))));//供应商id
				}
				storebean.setSupplierName(String.valueOf(this.getCell(row.getCell(8))));//供应商名称
				storebean.setMca1(String.valueOf(this.getCell(row.getCell(11))));//mcas一级类目
				storebean.setMca2(String.valueOf(this.getCell(row.getCell(12))));//mcas二级类目
				storebean.setMca3(String.valueOf(this.getCell(row.getCell(13))));//mcas三级类目
				storebean.setMcaLast(String.valueOf(this.getCell(row.getCell(14))));//mcas末级类目
				storebean.setWaiter(String.valueOf(this.getCell(row.getCell(16))));//招商小二    责任人
				
				
				if(this.getCell(row.getCell(20))==null || this.getCell(row.getCell(20)).equals("")){
					storebean.setStore(0);//库存数量  物流宝可销售库存数
				}else{
					storebean.setStore(Integer.parseInt(String.valueOf(this.getCell(row.getCell(20)))));//库存数量  物流宝可销售库存数
				}
				if(this.getCell(row.getCell(21))==null || this.getCell(row.getCell(21)).equals("")){
					storebean.setLockup(0);//库存数量  物流宝可销售库存数
				}else{
					storebean.setLockup(Integer.parseInt(String.valueOf(this.getCell(row.getCell(21)))));//锁定库存 物流宝锁定库数
				}
				
				storebean.setGoodId(null);//商品条码	
				storebean.setSkuName(null);//规格名称 规格的值每次都是空的 直接做空处理
				storebean.setStoreStatus(null);//库存状态
				storebean.setOccupy(null);//占用数量
				storebean.setCatId(null);//淘宝类目id
				storebean.setCatName(null);//淘宝类目名称
				storebean.setWarehouse(null);
				storebean.setCreateTime(new Date());//更新时间
				
				LmProduct pros=this.dealProduct(storebean,maps);
				if(pros!=null){
					storebean.setDeleted(0);
				}else{
					storebean.setDeleted(1);//删除标志
				}
				
				dao.saveOrUpdate(storebean);//添加cs_store_date
				number++;
			}
			this.saveProductByMap(maps);//订单中有新品存在 就保存 
			this.saveExcel(aExcel, aFile);//备份excel文件
			
		} catch (Exception e) {
			// TODO: handle exception
			number = 0;
			e.printStackTrace();
			throw new TonicareException();
		}
		return number;
	}
	
	//lmproduct产品表里面有的产品 库存表里面在标记为正常否则为删除商品
	private LmProduct dealProduct(CsStoreDate aOrder, Map<Long,LmProduct> aMap) {
		LmProduct result = null;
		if (aOrder!=null) {
			Long productId = Long.valueOf(aOrder.getProductId().toString());
			result = aMap.get(productId);
			if (result==null) {
				result = new LmProduct();
				result.setId(Long.valueOf(aOrder.getProductId().toString()));
				result.setUpdateTime(new Date());
			}
			result.setName(aOrder.getProductName());
			result.setCode(aOrder.getGoodId());
			aMap.put(productId, result);
		}
		return result;
	}
	public Object getCell(XSSFCell cell){
		Object value=null;
		
		DecimalFormat df=new DecimalFormat("0");// 格式化 number String 字符
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");// 格式化日期字符串
		DecimalFormat nf=new DecimalFormat();
				     
		switch(cell.getCellType()){
			case XSSFCell.CELL_TYPE_STRING:
					value=cell.getStringCellValue();
				 break;
			case XSSFCell.CELL_TYPE_NUMERIC:
				 	if(("@").equals(cell.getCellStyle().getDataFormatString())){
				    	 value=df.format(cell.getNumericCellValue());
				    }else if("General".equals(cell.getCellStyle().getDataFormatString())){
				    	 value=nf.format(cell.getNumericCellValue());
				    }else{
				         value=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
				   	}
				  break;
			case XSSFCell.CELL_TYPE_BOOLEAN:
				    value=cell.getBooleanCellValue();
				  break;
			case XSSFCell.CELL_TYPE_BLANK:
				    value="";
				  break;
			default:
				   	value=cell.toString();
				  break;
		}
		return value;
	}
	
	//将导入的库存的信息里面的新产品添加进产品信息里面  如果是已经存在的产品则更新产品名称和产品条码
	private void saveProductByMap(Map<Long,LmProduct> aMap) {
		if (aMap!=null) {
			SalesTMallDao dao = (SalesTMallDao) BeanFactory.getDao(Const.DAO_SALES_SALESTMALLDAO);
			try {
				Iterator it = aMap.entrySet().iterator();
				while (it.hasNext()) {
					Map.Entry<Long,LmProduct> entry = (Map.Entry<Long,LmProduct>) it.next();
					long key = entry.getKey();
					LmProduct val = entry.getValue();
					
					LmProduct bean = dao.getProductById(key);
					if (bean==null) {
						bean = new LmProduct();
						bean.setId(key);//商品id
						bean.setPlatform(2);//2  代表的是天猫平台
						bean.setDeleted(0);//0 代表在售商品
						bean.setUpdateTime(new Date());
					}
					bean.setName(val.getName());//商品名称
					dao.saveOrUpdate(bean);
				}
			}
			catch(Exception ex) {
				ex.printStackTrace();
			}
		}
	}
	
	//得到天猫所有的产品
	private Map<Long,LmProduct> getProductsBymap(){
		Map<Long, LmProduct> map=new HashMap<Long, LmProduct>();
		SalesTMallDao dao=(SalesTMallDao) BeanFactory.getDao(Const.DAO_SALES_SALESTMALLDAO);
		try {
			List<LmProduct> list=dao.getTmallProduct();
			for(LmProduct row:list){
				map.put(row.getId(),row);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return map;
	}
	
	//保存excel文件
	private boolean saveExcel(File aSrc, String aFileName) {
		boolean result = false;
		String path = Config.UPLOAD_PATH + File.separator + "tmall" + File.separator + aFileName + ".xls";
		try {
			File dst = new File(path);
			FileUtils.moveFile(aSrc, dst);
			result = true;
		}catch (Exception e) {
			result = false;
			e.printStackTrace();
		}
		return result;
	}
	
}

 

分享到:
评论

相关推荐

    poi读取excel2007和2003兼容工具例子

    在这个"poi读取excel2007和2003兼容工具例子"中,我们将探讨如何使用POI来读取不同版本的Excel文件,特别是Excel 2003(.xls)和Excel 2007及更高版本(.xlsx)。 1. **Apache POI库**:Apache POI是Apache软件基金...

    poi读取Excel2007文件

    标题中的“poi读取Excel2007文件”指的是使用Apache POI库来处理Microsoft Office Open XML (OOXML) 格式的Excel文件,也就是.xlsx格式。Apache POI是Apache软件基金会的一个开源项目,它提供了Java API,使得开发者...

    Java使用apache POI读取Excel2007以上代码以及所需jar包

    首先,要使用Apache POI读取XLSX文件,你需要确保引入了正确的依赖。Apache POI项目提供了多个组件,其中HSSF用于处理老版的BIFF格式(XLS),而XSSF则用于处理OOXML格式(XLSX)。因此,你需要在你的项目中包含以下...

    java poi 读取excel 2007

    以上就是使用Java POI读取Excel 2007文件并将内容存储到List的基本过程。这个过程可以根据实际需求进行调整,比如处理表头、忽略空行、处理特殊格式的单元格等。在处理大数据量时,还需要考虑性能优化,例如使用迭代...

    如何用 poi读取excel2007文件 附源代码和全部jar包

    本文将详细讲解如何使用Apache POI读取Excel 2007(.xlsx)文件,并提供相关的源代码和jar包。 首先,理解Apache POI中的主要类和接口是关键。对于读取Excel 2007文件,我们主要会用到`XSSFWorkbook`和` XSSFSheet`...

    POI 生成EXCEL2007【含例子】

    标题 "POI 生成EXCEL2007【含例子】" 涉及到的知识点主要集中在Apache POI库的使用上,这是一个强大的Java API,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel文件。在这个场景中,重点是创建和操作...

    解决poi读取excel2007出现内存溢出问题代码参

    以上就是关于如何使用Apache POI的SXSSF API解决读取Excel 2007文件时内存溢出问题的关键知识点。通过这种方式,我们可以处理大文件而不会过度消耗内存,从而提高程序的稳定性和效率。在实际项目中,需要根据具体...

    POI读取Excel带格式数据

    标题 "POI读取Excel带格式数据" 涉及到的是Apache POI库在Java中的使用,这个库允许开发者处理Microsoft Office格式的文件,包括Excel。Apache POI是一个开源项目,提供了API来读取、写入和修改Excel文档。在本场景...

    POI读取2007 Excel文件

    标题中的“POI读取2007 Excel文件”指的是使用Apache POI库来解析和操作Microsoft Office Open XML (OOXML)格式的Excel文件,这种格式通常以.xlsx为扩展名。Apache POI是一个流行的Java库,它允许开发人员在Java应用...

    利用POI读取excel写入到word

    要实现"利用POI读取excel写入到word",我们需要以下步骤: 1. **准备环境**:首先,确保你的项目已经引入了Apache POI的依赖。在给定的压缩包中,"poi - 副本"可能是包含POI库的JAR文件,你需要将其添加到你的项目...

    poi读取excel文件实例(兼容excel2007)

    在“poi读取excel文件实例”中,我们将讨论如何使用Apache POI API来读取和操作Excel 2007文件。以下是一些关键知识点: 1. **创建工作簿对象**:首先,你需要通过`WorkbookFactory`类的`create()`方法打开或创建一...

    android5使用poi读取excel

    android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel

    POI读取excel的内容.zip

    本教程将详细讲解如何使用Apache POI库来读取Excel文件的内容。 首先,为了在Java项目中使用Apache POI,我们需要通过Maven进行依赖管理。在`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.poi ...

    poi读取excel并输出到jsp页面

    例如,“java读取Excel2007.doc”可能是一个关于使用POI处理Excel 2007 (.xlsx) 文件的文档;“JSP读取excle文件(poi)_爱题巴_爱技术_小川哥_百度空间.htm”可能是一个详细教程,讲解了如何结合JSP和POI读取Excel...

    poi读取excel的jar包

    对于3.9版本,用户可以期待它对Excel文件处理的稳定性和兼容性。 在提供的压缩包文件名称"poi-3.9"中,我们可以推断出这包含的是Apache POI 3.9版本的所有JAR文件和其他相关资源。通常,这样的压缩包会包含poi-3.9....

    poi读取excel文件

    Apache POI提供了丰富的API,可以实现对Excel文件的复杂操作,如合并单元格、设置样式、处理公式等。在Android开发中,这些功能同样适用,但需要注意资源管理,因为Android设备的内存有限。 总的来说,Apache POI是...

    POI读取excel的例子

    POI读取excel的例子

    POI生成Excel POI操作Excel POI读取Excel POI类库

    **POI读取Excel** 读取Excel主要涉及以下步骤: 1. **打开Workbook**:通过 FileInputStream 读取Excel文件,然后创建Workbook对象。 2. **获取Sheet**:从Workbook中获取需要的Sheet。 3. **遍历Row和Cell**:...

Global site tag (gtag.js) - Google Analytics