poi导入excel

请看excel分类,其他的博客,下面的博客写的比较早,没啥太大利用价值,纯粹是复制代码

贴代码:

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@Override
	public List<String> upload(PProduct product, InputStream is,String lastName)throws Exception {
		HqlBean hqlBean = HqlBeanCacheUtil.gethqlBeanCache().get("cn.digitalpublishing.dao.PProductDao").get("getList");
		String statusYes = DicCache.getIdByCode(DicConstants.DIC_STATUS, DicConstants.DATA_STATUS_AVAILABLE);
		Map<String, Object> condition = new HashMap<String, Object>();
		Map<String, Object> params = new HashMap<String, Object>();
		List<String> isbnList = new ArrayList<String>();
		byte[] excelByte = IOUtils.toByteArray(is);
		Workbook xwb = null;
		try {
			if(lastName.equals("xlsx")){
				xwb = new XSSFWorkbook(new ByteArrayInputStream(excelByte));
			}else{
				xwb = new HSSFWorkbook(new ByteArrayInputStream(excelByte));
			}

			Sheet sheet = xwb.getSheetAt(0);
			for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getPhysicalNumberOfRows(); i++) {
				condition.clear();
				Row row = sheet.getRow(i);
				if (row != null) {
					Cell isbn = row.getCell(0);
					Cell title = row.getCell(1);
					Cell publish = row.getCell(2);
					Cell price = row.getCell(3);
					Cell firstAuthor = row.getCell(4);
					Cell translator = row.getCell(5);
					Cell size = row.getCell(6);
					Cell binding = row.getCell(7);
					Cell pubDate = row.getCell(8);
					String isDiagiTal = DicCache.getIdByCode(DicConstants.ISDIGITAL, DicConstants.ISDIGITAL_0);
					int packageNum = 4;
					int bookNum = 4;
					String isTeaching = "";//DicCache.getIdByCode(DicConstants.DIC_STATUS, DicConstants.DATA_STATUS_AVAILABLE)

					if ((isbn != null)||title != null||publish != null||price != null||firstAuthor != null) {

						params.put("isbn", isbn.toString());
						params.put("title", title.toString());
						//params.put("publish", publish.toString());     出版社
						BigDecimal _price = new BigDecimal(price.toString());
						params.put("price", _price);
						params.put("firstAuthor", firstAuthor.toString());
						//PProduct _product = this.daoFacade.getProductDao().getList(params, "", hqlBean).get(0);
						List<PProduct> _listProduct = this.daoFacade.getProductDao().getList(params, "", hqlBean);
						if(_listProduct.size()==0){
							ServiceFactory service = new ServiceFactoryImpl();
							PProductTypeService saleItemService = service.getPProductTypeService();
							PProductType productTypeByCode = saleItemService.getProductTypeByCode("book");
							PProduct _proLine = new PProduct();
							_proLine.setIsbn(isbn.toString());
							_proLine.setTitle(title.toString());
							_proLine.setPublish(publish.toString());
							_proLine.setPrice(_price);
							_proLine.setFirstAuthor(firstAuthor.toString());
							_proLine.setTranslator(translator.toString());
							_proLine.setSize(size.toString());
							_proLine.setBinding(binding.toString());
							/*String _date = pubDate.toString();
							SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
						    Date cd=sdf.parse(_date);
							_proLine.setPubDate(cd);*/
							_proLine.setIsDiagiTal(isDiagiTal);
							_proLine.setPackageNum(packageNum);
							_proLine.setBookNum(bookNum);
							_proLine.setIsTeaching(isTeaching);

							_proLine.setProductType(productTypeByCode);
							_proLine.setOwnerFlag(DicCache.getIdByCode(DicConstants.PRODUCT_OWNER_FLAG, DicConstants.PRODUCT_OWNER_FLAG_OTHER));
							_proLine.setStatus(DicCache.getIdByCode(DicConstants.DIC_STATUS, DicConstants.DATA_STATUS_AVAILABLE));
							_proLine.setCreateOn(new Date());
							/*String projectCode = EditorailSerialCode.getCode(Integer.valueOf(DicConstants.CODE_TYPE_PROJECT), crmCorpTypeRelationship.getCorp().getCode());
							_proLine.setCode(projectCode);
							_proLine.setProductIntegerNum(projectCode);*/

							this.insertProduct(_proLine);
						}else{
							isbnList.add(title.toString());
						}
					}else{
						throw new RuntimeException("第"+i+"行数据不完整,请认真填写");
					}
				}

			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return isbnList;
	}
时间: 2024-09-12 08:28:44

poi导入excel的相关文章

poi导入excel到数据库,excel中的空白行也会导入到数据库

问题描述 poi导入excel到数据库,excel中的空白行也会导入到数据库 if条件判断也没起作用,如何才能正确判断 解决方案 将数据库中的内容导入到excel 解决方案二: 应该判断的是 该行内容的空白,而不是 row 对应的 null 值. row 对应不会为 null 的,只是行内数据的 空白 . 解决方案三: 判断 row == null这个地方不对,需要判断行里的内容为null才可以 你可以单步调试一下,看看 解决方案四: 判断方法不对,看下执行到的步骤

poi导入excel到数据库,数据库是number类型,实体是integer,解析过程中报错

问题描述 poi导入excel到数据库,数据库是number类型,实体是integer,解析过程中报错 解决方案 cell里的值是文本类型,不能强制转型

POI导入EXCEL出现的问题

问题描述 代码如下:InputStreaminp=newFileInputStream(path);//使用workbookFactory实例化workbook对象Workbookwb=WorkbookFactory.create(inp);intcolumnNum=0;//得到要读取的sheetSheetsheet=wb.getSheetAt(sheetIndex);//得到当前sheet中的所有行的行数if(sheet.getRow(0)!=null){columnNum=sheet.get

java的poi技术读取和导入Excel实例_java

报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序进行Excel的读取和导入. 项目结构: java_poi_excel用到的Excel文件:xls XlsMain .java 类 //该类有main方法,主要负责运行程序,同时该类中也包含了用poi读取Excel(2003版) import java.io.FileInputStream; import

java导入excel时怎么处理日期格式

在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格的类型是否则NUMERIC类型,然后再判断单元格是否为日期格式,如果是的话,创建一个日期格式,再将单元格的内容以这个日期格式显示出来. 如果单元格不是日期格式,那么则直接得到NUMERIC的值就行了. 具体代码如

java poi做导入excel 2007在本地没问题,在正式环境出问题

问题描述 java poi做导入excel 2007在本地没问题,在正式环境出问题 解决方案 先上传到服务器.再做导入 解决方案二: 就是先上传到服务器的 解决方案三: 你文件上传到服务器后的保存目录是D:apache.......poifiles这个目录么

poi处理excel大数据量的导入会报内存溢出

问题描述 poi处理excel大数据量的导入会报内存溢出 XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(fileName())); 就是单独执行这行代码都不行,报内存溢出,我把虚拟机都设置成最大了也溢出 差不多10万行吧 解决方案 poi大数据量excel导入 解决方案二: 可以参考这:poi的eventmodel写的大数据量的excel的读取程序.http://gaosheng08.iteye.com/blog/624

导入-在poi读取excel的合并数据时,怎么判断合并了多少行以及怎么取值

问题描述 在poi读取excel的合并数据时,怎么判断合并了多少行以及怎么取值 类似于上面的导入格式怎么读数据 解决方案 参考这个EXCEL中如何用VBA判断某一地址单元格是否为合并单元格然后把vba转成你自己的语言http://wenku.baidu.com/link?url=nsc0K4oKljjsvfVayJIXT9q2oNcWMwgjRghQdCqOPPJaH_Zm0UNgwqRKRdmC5PypqxvKwIDBgRV7i8W9sxiR0_KhBR78e6b6vTenaoVEE-7

java poi的excel导入数据读取

问题描述 java poi的excel导入数据读取 在使用poi时候,如何将获取的row转换成列,,现在excel模板格式就是类似这种,以行作为一个对象的第一个字段,列作为一个对象. 就比如 第一行作为对象第一个属性值的内容,第二行作为属性第二个属性值的内容,以此类推. 解决方案 你是不会读取数据吗?先循环所有的工作表,再循环所有的行,最后循环这一行里面所有的列,取出来不就完了么 解决方案二: Microsoft的Office系列产品拥有大 量的用户,Word.Excel也成为办公文件的首选.在