POI导入数据

上传文件的时候要特别注意单元格内的值属性和数据库内的字段要相匹配  而且要注意取值时候的进行值的转换,而且进行值转换的时候要注意poi版本之间的差距,下方的值转换方法并不齐全  如果遇到复杂的值处理  需要补全

// 3.设置参数工厂,临时存放上传文件.
		DiskFileItemFactory dfif = new DiskFileItemFactory();
		// 4.设置工厂临时文件的大小
		dfif.setSizeThreshold(1024 * 1024 * 3);
		// 5.设置临时文件存储的位置
		dfif.setRepository(new File(System.getProperty("java.io.tmpdir")));
		// 5创建上传对象
		ServletFileUpload fileUpload = new ServletFileUpload(dfif);
		// 6设置上传文件大小
		fileUpload.setFileSizeMax(1024 * 1024 * 50);
		// 7设置表单的大小
		fileUpload.setSizeMax(1024 * 1024 * 100);
		// 8设置表单字符
		fileUpload.setHeaderEncoding("utf-8");
		// 10获取上传文件
		List<FileItem> fileItems = fileUpload.parseRequest(request);
		FileItem fileItem = fileItems.get(0);
		
		/**
		 * 获取文件后缀
		 */
		String str = fileItem.getName().substring(fileItem.getName().lastIndexOf("."));
		if (str.equals(".xls") || str.equals(".xlsx")) {// 判断上传的文件是不是表格
			POIFSFileSystem pfs = new POIFSFileSystem(fileItem.getInputStream());
			HSSFWorkbook wb = new HSSFWorkbook(pfs);
			/**
			 * 获取到sheet的页数
			 */
			int sheets = wb.getNumberOfSheets();
			HSSFSheet sheetAt = null;
			List<String> ls = null;
			for (int i = 0; i < sheets; i++) {
				sheetAt = wb.getSheetAt(0);

				/**
				 * 遍历当前的sheet页里面的行 sheetAt.getLastRowNum() 获取到最后一行的位置
				 */

				for (int rowIndex = 1; rowIndex <= sheetAt.getLastRowNum(); rowIndex++) {
					/**
					 * 获取当前的行对象
					 */
					HSSFRow hssfRow = sheetAt.getRow(rowIndex);// 获取到当前行的对象
					if (hssfRow == null) {
						continue;
					}
					ls = new ArrayList<>();
					/**
					 * 同理遍历当前行里的所有列 hssfRow.getLastCellNum() 获取到最后一列的位置
					 */
					for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) {
						HSSFCell hssfCell = hssfRow.getCell(cellNum);// 获取到列对象
						if (hssfCell == null) {
							continue;
						}
             
						/**
						 * 调用值处理的方法
						 */
						ls.add(getValue(hssfCell));
					}
				}
			}
		} else {
			String jsonString = JSON.toJSONString("兄弟上传表格可否");
			super.print(jsonString, response);
		}}catch (Exception e) {
		falg=false;
		  throw new RuntimeException("上传失败了");
		}
/**
	 * 
	 * @Title: getValue
	 * @Description: (判断单元格对象的值类型 这是3.9版本的写法)
	 * @param hssfCell
	 * @return
	 * @return String
	 */
	private static String getValue(HSSFCell hssfCell) {
		/**
		 * 值类型的常量值 HSSFCell.CELL_TYPE_BOOLEAN
		 */
		if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(hssfCell.getBooleanCellValue());
		} else if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
			/**
			 * 小的工具类 判断此单元格是不是时间格式
			 */
			if (HSSFDateUtil.isCellDateFormatted(hssfCell)) {
				/**
				 * 取到的时候数字 因为时间格式不能显示给人家数字所以转换 转换格式
				 */
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				return sdf.format(HSSFDateUtil.getJavaDate(hssfCell.getNumericCellValue()));
			}
			//如何后边出现.0要将其截取掉    不然进行数据处理的时候会有很大的问题
			String str = String.valueOf(hssfCell.getNumericCellValue());
			String stt = str.substring(str.lastIndexOf("."));
			if (stt.endsWith(".0")) {
				return str.substring(0, str.lastIndexOf("."));
			}
			return String.valueOf(hssfCell.getNumericCellValue());
		} else {
			return String.valueOf(hssfCell.getStringCellValue());
		}
	}

猜你喜欢

转载自blog.csdn.net/qq_41594146/article/details/83099756
今日推荐