poi读取excel2007

   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;
	}
	
}

猜你喜欢

转载自tiankongtingmei.iteye.com/blog/2205800