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来读取不同版本的Excel文件,特别是Excel 2003(.xls)和Excel 2007及更高版本(.xlsx)。 1. **Apache POI库**:Apache POI是Apache软件基金...
标题中的“poi读取Excel2007文件”指的是使用Apache POI库来处理Microsoft Office Open XML (OOXML) 格式的Excel文件,也就是.xlsx格式。Apache POI是Apache软件基金会的一个开源项目,它提供了Java API,使得开发者...
首先,要使用Apache POI读取XLSX文件,你需要确保引入了正确的依赖。Apache POI项目提供了多个组件,其中HSSF用于处理老版的BIFF格式(XLS),而XSSF则用于处理OOXML格式(XLSX)。因此,你需要在你的项目中包含以下...
以上就是使用Java POI读取Excel 2007文件并将内容存储到List的基本过程。这个过程可以根据实际需求进行调整,比如处理表头、忽略空行、处理特殊格式的单元格等。在处理大数据量时,还需要考虑性能优化,例如使用迭代...
本文将详细讲解如何使用Apache POI读取Excel 2007(.xlsx)文件,并提供相关的源代码和jar包。 首先,理解Apache POI中的主要类和接口是关键。对于读取Excel 2007文件,我们主要会用到`XSSFWorkbook`和` XSSFSheet`...
标题 "POI 生成EXCEL2007【含例子】" 涉及到的知识点主要集中在Apache POI库的使用上,这是一个强大的Java API,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel文件。在这个场景中,重点是创建和操作...
以上就是关于如何使用Apache POI的SXSSF API解决读取Excel 2007文件时内存溢出问题的关键知识点。通过这种方式,我们可以处理大文件而不会过度消耗内存,从而提高程序的稳定性和效率。在实际项目中,需要根据具体...
标题 "POI读取Excel带格式数据" 涉及到的是Apache POI库在Java中的使用,这个库允许开发者处理Microsoft Office格式的文件,包括Excel。Apache POI是一个开源项目,提供了API来读取、写入和修改Excel文档。在本场景...
标题中的“POI读取2007 Excel文件”指的是使用Apache POI库来解析和操作Microsoft Office Open XML (OOXML)格式的Excel文件,这种格式通常以.xlsx为扩展名。Apache POI是一个流行的Java库,它允许开发人员在Java应用...
要实现"利用POI读取excel写入到word",我们需要以下步骤: 1. **准备环境**:首先,确保你的项目已经引入了Apache POI的依赖。在给定的压缩包中,"poi - 副本"可能是包含POI库的JAR文件,你需要将其添加到你的项目...
在“poi读取excel文件实例”中,我们将讨论如何使用Apache POI API来读取和操作Excel 2007文件。以下是一些关键知识点: 1. **创建工作簿对象**:首先,你需要通过`WorkbookFactory`类的`create()`方法打开或创建一...
android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel
本教程将详细讲解如何使用Apache POI库来读取Excel文件的内容。 首先,为了在Java项目中使用Apache POI,我们需要通过Maven进行依赖管理。在`pom.xml`文件中添加以下依赖: ```xml <groupId>org.apache.poi ...
例如,“java读取Excel2007.doc”可能是一个关于使用POI处理Excel 2007 (.xlsx) 文件的文档;“JSP读取excle文件(poi)_爱题巴_爱技术_小川哥_百度空间.htm”可能是一个详细教程,讲解了如何结合JSP和POI读取Excel...
对于3.9版本,用户可以期待它对Excel文件处理的稳定性和兼容性。 在提供的压缩包文件名称"poi-3.9"中,我们可以推断出这包含的是Apache POI 3.9版本的所有JAR文件和其他相关资源。通常,这样的压缩包会包含poi-3.9....
Apache POI提供了丰富的API,可以实现对Excel文件的复杂操作,如合并单元格、设置样式、处理公式等。在Android开发中,这些功能同样适用,但需要注意资源管理,因为Android设备的内存有限。 总的来说,Apache POI是...
POI读取excel的例子
**POI读取Excel** 读取Excel主要涉及以下步骤: 1. **打开Workbook**:通过 FileInputStream 读取Excel文件,然后创建Workbook对象。 2. **获取Sheet**:从Workbook中获取需要的Sheet。 3. **遍历Row和Cell**:...