`

excel导入

    博客分类:
  • poi
阅读更多

工作中导入excel每次都要重写会不会很麻烦?

答案是肯定的。今天写了一个稍微通用一点的excel导出工具类,如果大家看了觉得还蛮好用,或是有什么问题,记得给我留言。

 

package com.system.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
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.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.ss.usermodel.CellStyle;
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 com.pkg.controller.form.Pojo;
/***
 * 
 * @作者 Dick
 * @创建时间 2015年9月6日 下午3:39:36
 * @TODO excel导入的工具类
 * @修改备注
 * 
 *
 */
/***
 * 
 * @作者 Dick
 * @创建时间 2015年9月6日 下午5:25:13
 * @TODO
 * excel导出工具类,
 * 需要poi支持
 * 
 * @修改备注
 * 
 *
 */
public class ImportExcelUtil {
	private static Logger log = Logger.getLogger(ImportExcelUtil.class);
	/***
	 * 日期格式化类型
	 * 
	 * */
	private static String[] dateFormats = new String[]{"yyyy-MM","yyyyMM","yyyy/MM",   
        "yyyyMMdd","yyyy-MM-dd","yyyy/MM/dd",   
        "yyyyMMddHHmmss",   
                    "yyyy-MM-dd HH:mm:ss",   
                    "yyyy/MM/dd HH:mm:ss"};  
	/***
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午3:08:50
	 * @param @param file
	 * @param @param clazz
	 * @param @param field 格式: excel列名=实体属性名
	 * @param @return
	 * @TODO 读取excel文件的内容。读取失败时返回 null;
	 * 
	 * @修改备注
	 * 
	 *
	 */
	public static List getExcelContent(File file, Class clazz,
			Map<String, Object> fields) {
		FileInputStream io = null;//poi会在结束时自动关闭流
		try {
			io = new FileInputStream(file);
			return getExcelContent(io, clazz, fields);
		} catch (FileNotFoundException e) {
			log.info("导入excel失败,文件不存在");
			log.error(e.getMessage(),e);
		} catch(OfficeXmlFileException e){
			log.error("excel属于Office 2007+ XML,因此采用xlsx读取.");
			//如果是2007以上的excel,在catch中处理
			try {
				io = new FileInputStream(file);
				//xlsx结尾的excel。
				return getExcelContentXlsx(io, clazz, fields);
			} catch (FileNotFoundException e1) {
				log.error(e1.getMessage(),e1);
			}
		}
		return null;
	}

	/****
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午3:37:00
	 * @param @param io
	 * @param @param clazz
	 * @param @param fields 格式: excel列名=实体属性名
	 * @param
	 * @return
	 * @TODO 只能读取*.xls的excel文件流中的内容, 读取失败时返回 null;
	 * @修改备注
	 * 
	 *
	 */
	public static List getExcelContent(InputStream io, Class clazz,
			Map<String, Object> fields) {
		HSSFWorkbook workbook = null;
		HSSFSheet sheet = null;
		List<Object> results =null;
		try {
			 workbook = new HSSFWorkbook(io);
			for (Iterator iterator = fields.keySet().iterator(); iterator
					.hasNext();) {
				String key =  iterator.next().toString();
				String prop =  fields.get(key).toString();
				fields.put(key, clazz.getDeclaredField(prop));
			}
			results=new ArrayList<Object>();
			
			
			sheet = workbook.getSheetAt(0);
			// 标题总列数
			int maxRow = sheet.getLastRowNum();
			List<String> columns = new ArrayList<String>();
			for (int j = 0; j < sheet.getRow(0).getLastCellNum(); j++) {
				columns.add(sheet.getRow(0).getCell(j).getStringCellValue()
						.trim());
			}

			for (int j = 1; j < maxRow; j++) {
				HSSFRow row = sheet.getRow(j);
				if (null != row) {
					Object obj = Class.forName(clazz.getName()).newInstance();
					for (int k = 0; k < row.getLastCellNum(); k++) {
						HSSFCell cell = row.getCell(k);
						Object value = null;
						if (null != cell) {
							switch (cell.getCellType()) {
							case HSSFCell.CELL_TYPE_NUMERIC: // 数字
								// 日期格式处理
								if (HSSFDateUtil.isCellDateFormatted(cell)) {
									if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
										SimpleDateFormat sdf = null;
										if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
												.getBuiltinFormat("h:mm")) {
											sdf = new SimpleDateFormat("HH:mm");
										} else {// 日期
											sdf = new SimpleDateFormat(
													"yyyy-MM-dd");
										}
										Date date = cell.getDateCellValue();
										value = date;
									} else if (cell.getCellStyle()
											.getDataFormat() == 58) {
										// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
										SimpleDateFormat sdf = new SimpleDateFormat(
												"yyyy-MM-dd");
										double v = cell.getNumericCellValue();
										Date date = org.apache.poi.ss.usermodel.DateUtil
												.getJavaDate(v);
										value = date;
									} else {
										double v = cell.getNumericCellValue();
										CellStyle style = cell.getCellStyle();
										DecimalFormat format = new DecimalFormat();
										String temp = style
												.getDataFormatString();
										// 单元格设置成常规
										if (temp.equals("General")) {
											format.applyPattern("#");
										}
										value = Double.valueOf(v);
									}
								}

								break;
							case HSSFCell.CELL_TYPE_STRING: // 字符串
								value = cell.getStringCellValue() != null ? cell
										.getStringCellValue().trim() : null;
								break;
							case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
								value = Boolean.valueOf(cell
										.getBooleanCellValue());
								break;
							case HSSFCell.CELL_TYPE_FORMULA: // 公式
								value = null;
												// + "   ");
								break;
							case HSSFCell.CELL_TYPE_BLANK: // 空值
								value = null;// System.out.println(" ");
								break;
							case HSSFCell.CELL_TYPE_ERROR: // 故障
								value = null;// System.out.println(" ");
								break;
							default:
								value = null;// System.out.print("未知类型   ");
								break;
							}

							Field field = (Field) fields.get(columns.get(k));
							if(field!=null){fieldValueSetting(clazz, field, obj, value);}
						} else {
							continue;
						}
					}

					results.add(obj);
				}

			}
			return results;
		} catch (FileNotFoundException e) {
			log.info("导入excel失败,文件不存在");
			log.error(e.getMessage(),e);
		} catch (IOException e) {
			log.info("导入excel失败,文件流异常");
			log.error(e.getMessage(),e);
		} catch (ClassNotFoundException e) {
			log.info("导入excel失败,无法根据class创建对象");
			log.error(e.getMessage(),e);
		} catch (NoSuchFieldException e) {
			log.info("导入excel失败,无法获取类的属性字段");
			log.error(e.getMessage(),e);
		} catch (SecurityException e) {
			log.info("导入excel失败,无法获取类的属性字段");
			log.error(e.getMessage(),e);
		} catch (InstantiationException e) {
			log.info("导入excel失败,创建对象失败,至少有一个无参的构造函数");
			log.error(e.getMessage(),e);
		} catch (IllegalAccessException e) {
			log.info("导入excel失败,创建行对象失败!");
			log.error(e.getMessage(),e);
		} finally {
			if (workbook != null) {
				workbook = null;
			}

		}

		return null;

	}
	
	/***
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午4:03:50
	 * @param @param io
	 * @param @param clazz
	 * @param @param fields
	 * @param @return
	 * @TODO
	 *  只能读取*.xlsx文件中的内容,读取失败返回 null
	 * 
	 * @修改备注
	 * 
	 *
	 */
	public static List getExcelContentXlsx(InputStream io, Class clazz,
			Map<String, Object> fields) {
		XSSFWorkbook workbook = null;
		XSSFSheet sheet = null;
		List<Object> results = new ArrayList<Object>();
		try {
			workbook = new XSSFWorkbook(io);
			for (Iterator iterator = fields.keySet().iterator(); iterator
					.hasNext();) {
				String key =  iterator.next().toString();
				//System.out.println("100:key="+key);
				String prop =  fields.get(key).toString();
				fields.put(key, clazz.getDeclaredField(prop));
			}
			
			
			sheet = workbook.getSheetAt(0);
			// 标题总列数
			int maxRow = sheet.getLastRowNum();
			List<String> columns = new ArrayList<String>();
			for (int j = 0; j < sheet.getRow(0).getLastCellNum(); j++) {
				columns.add(sheet.getRow(0).getCell(j).getStringCellValue()
						.trim());
			}

			for (int j = 1; j <= maxRow; j++) {
				XSSFRow row = sheet.getRow(j);
				if (null != row) {
					Object obj = Class.forName(clazz.getName()).newInstance();
					for (int k = 0; k < row.getLastCellNum(); k++) {
						XSSFCell cell = row.getCell(k);
						Object value = null;
						if (null != cell) {
							Field field = (Field) fields.get(columns.get(k));
							if(field!=null){
							switch (cell.getCellType()) {
							case XSSFCell.CELL_TYPE_NUMERIC: // 数字
								// 日期格式处理
								if (HSSFDateUtil.isCellDateFormatted(cell)) {
									if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
										SimpleDateFormat sdf = null;
										if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
												.getBuiltinFormat("h:mm")) {
											sdf = new SimpleDateFormat("HH:mm");
										} else {// 日期
											sdf = new SimpleDateFormat(
													"yyyy-MM-dd");
										}
										Date date = cell.getDateCellValue();
										value = date;
									} else if (cell.getCellStyle()
											.getDataFormat() == 58) {
										// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
										SimpleDateFormat sdf = new SimpleDateFormat(
												"yyyy-MM-dd");
										double v = cell.getNumericCellValue();
										Date date = org.apache.poi.ss.usermodel.DateUtil
												.getJavaDate(v);
										value = date;
									} else {
										double v = cell.getNumericCellValue();
										CellStyle style = cell.getCellStyle();
										DecimalFormat format = new DecimalFormat();
										String temp = style
												.getDataFormatString();
										// 单元格设置成常规
										if (temp.equals("General")) {
											format.applyPattern("#");
										}
										value = Double.valueOf(v);
									}
								}

								break;
							case XSSFCell.CELL_TYPE_STRING: // 字符串
								value = cell.getStringCellValue() != null ? cell
										.getStringCellValue().trim() : null;
								break;
							case XSSFCell.CELL_TYPE_BOOLEAN: // Boolean
								value = Boolean.valueOf(cell
										.getBooleanCellValue());
								break;
							case XSSFCell.CELL_TYPE_FORMULA: // 公式
								value = null;// System.out.print(cell.getCellFormula()
												// + "   ");
								break;
							case XSSFCell.CELL_TYPE_BLANK: // 空值
								value = null;// System.out.println(" ");
								break;
							case XSSFCell.CELL_TYPE_ERROR: // 故障
								value = null;// System.out.println(" ");
								break;
							default:
								value = null;// System.out.print("未知类型   ");
								break;
							}

							
								fieldValueSetting(clazz, field, obj, value);
								
							}
						} else {
							continue;
						}
					}

					results.add(obj);
				}

			}
			return results;
		} catch (FileNotFoundException e) {
			log.info("导入excel失败,文件不存在");
			log.error(e.getMessage(),e);
		} catch (IOException e) {
			log.info("导入excel失败,文件流异常");
			log.error(e.getMessage(),e);
		} catch (ClassNotFoundException e) {
			log.info("导入excel失败,无法根据class创建对象");
			log.error(e.getMessage(),e);
		} catch (NoSuchFieldException e) {
			log.info("导入excel失败,无法获取类的属性字段");
			log.error(e.getMessage(),e);
		} catch (SecurityException e) {
			log.info("导入excel失败,无法获取类的属性字段");
			log.error(e.getMessage(),e);
		} catch (InstantiationException e) {
			log.info("导入excel失败,创建对象失败,至少有一个无参的构造函数");
			log.error(e.getMessage(),e);
		} catch (IllegalAccessException e) {
			log.info("导入excel失败,创建行对象失败!");
			log.error(e.getMessage(),e);
		} finally {
			if (workbook != null) {
				workbook = null;
			}

		}

		return null;

	}
	 /**
	  * 
	  * @作者 Dick
	  * @创建时间 2015年9月6日 下午5:03:13
	  * @param @param clazz
	  * @param @param field
	  * @param @param target
	  * @param @param value
	  * @TODO
	  *  向clazz类的对象target的field属性设置值 value
	  * 
	  * @修改备注
	  * 
	  *
	  */
	public static  void fieldValueSetting(Class clazz,Field field,Object target,Object value)  {

			try {
				clazz.getMethod("set"+StringUtils.capitalize(field.getName()),field.getType()).invoke(target, cast(field.getType(),value));
			} catch (IllegalAccessException e) {
				log.error("私有成员,非法访问");
			} catch (IllegalArgumentException e) {
				log.error("非法参数:"+value.getClass().getName()+" to "+field.getType());
			} catch (InvocationTargetException e) {
				log.error("实例对象异常,target="+target.getClass().getName());
			} catch (NoSuchMethodException e) {
				log.error("对象方法异常,method=set"+StringUtils.capitalize(field.getName()));
			} catch (SecurityException e) {
				log.error(e.getMessage());
			}
		 
	
	}
	
	
	/***
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午4:54:00
	 * @param @param type 目标类型
	 * @param @param value 参数类型
	 * @param @return
	 * @TODO
	 * 
	 * 
	 * @修改备注
	 * 
	 *
	 */
	public static Object cast(Class<?> type,Object value){
		if(value.getClass().getName().equals(type.getName())){
			return value;
		}
		if("java.lang.String".equals(type.getName())){
			return value.toString();
		}
		if("java.lang.Long".equals(type.getName())&&"java.lang.String".equals(value.getClass().getName())){
			
			return Long.valueOf(value.toString().trim());
		}
		if("java.lang.Double".equals(type.getName())&&"java.lang.String".equals(value.getClass().getName())){
			
			return Double.valueOf(value.toString().trim());
		}
		if("java.lang.Integer".equals(type.getName())&&"java.lang.String".equals(value.getClass().getName())){
			
			return Integer.valueOf(value.toString().trim());
		}
		if("java.util.Date".equals(type.getName())&&"java.lang.String".equals(value.getClass().getName())){
		
			try {
				return DateUtils.parseDate(value.toString().trim(),dateFormats);
			} catch (ParseException e) {
				log.error("日期格式转换失败:"+value.toString().trim());
				return null;
			}
		}
		if("java.util.Date".equals(type.getName())&&"java.lang.Long".equals(value.getClass().getName())){
			return new Date(Long.valueOf(value.toString()));
		}
		return null;
	}

	/***
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午5:25:47
	 * @param @param args
	 * @TODO
	 * 测试
	 * 
	 * @修改备注
	 * 
	 *
	 */
	public static void main(String[] args) {
		Map<String, Object> fields = new HashMap<String, Object>();
		fields.put("包裹号", "packageId"); //key:excel字段名,value:实体的字段名
		fields.put("订单编号", "orderNumber");
		fields.put("公司", "deliveryCompany");
		fields.put("单号", "deliveryNo");
		fields.put("创建日期", "gmtCreated");
		
		
		List<Pojo> result = ImportExcelUtil.getExcelContent(
				new File("F:\\迅雷下载\\20150906125645.xlsx"), Pojo.class, fields);
		if (result != null) {
			for (int i = 0; i < result.size(); i++) {
				System.out.println(result.toString());
			}

		}
	}
}

 

excel的内容如下:

 

编号 包裹号 公司 单号 金额 手机号码 创建日期
500004 6 1 22222222222222 1.00 1

2015-05-05 00:00:00

 

 

 

package com.pkg.controller.form;

import java.util.Date;

public class Pojo {

	private Long packageId;
	private String orderNumber;
	private String deliveryCompany;
	private String deliveryNo;
	private Date gmtCreated;
	/**
	 * Long
	 * @return the packageId
	 */
	public Long getPackageId() {
		return packageId;
	}
	/**
	 * @param packageId the packageId to set
	 */
	public void setPackageId(Long packageId) {
		this.packageId = packageId;
	}
	/**
	 * String
	 * @return the orderNumber
	 */
	public String getOrderNumber() {
		return orderNumber;
	}
	/**
	 * @param orderNumber the orderNumber to set
	 */
	public void setOrderNumber(String orderNumber) {
		this.orderNumber = orderNumber;
	}
	/**
	 * String
	 * @return the deliveryCompany
	 */
	public String getDeliveryCompany() {
		return deliveryCompany;
	}
	/**
	 * @param deliveryCompany the deliveryCompany to set
	 */
	public void setDeliveryCompany(String deliveryCompany) {
		this.deliveryCompany = deliveryCompany;
	}
	/**
	 * String
	 * @return the deliveryNo
	 */
	public String getDeliveryNo() {
		return deliveryNo;
	}
	/**
	 * @param deliveryNo the deliveryNo to set
	 */
	public void setDeliveryNo(String deliveryNo) {
		this.deliveryNo = deliveryNo;
	}
	/**
	 * Date
	 * @return the gmtCreated
	 */
	public Date getGmtCreated() {
		return gmtCreated;
	}
	/**
	 * @param gmtCreated the gmtCreated to set
	 */
	public void setGmtCreated(Date gmtCreated) {
		this.gmtCreated = gmtCreated;
	}
	
}

 

 放到项目中可能会有编辑异常,调整后即可调用 main函数测试下了。

 

 

转载请注明出处,谢谢!

分享到:
评论

相关推荐

    第11讲:深入理解指针(1).pdf

    第11讲:深入理解指针(1)

    springboot整合 freemarker方法

    springboot整合 freemarker方法

    第14讲:深入理解指针(4).pdf

    第14讲:深入理解指针(4)

    同行者4.1.2语音助手

    《同行者4.1.2语音助手:车机版安装详解》 在现代科技日新月异的时代,智能车载设备已经成为了汽车生活的重要组成部分。"同行者4.1.2"便是这样一款专为车机设计的语音助手,旨在提供更为便捷、安全的驾驶体验。该版本针对掌讯全系列设备进行了兼容优化,让车主能够轻松实现语音控制,减少驾驶过程中的手动操作,提升行车安全性。 我们来了解下"同行者4.1.2"的核心功能。这款语音助手集成了智能语音识别技术,用户可以通过简单的语音指令完成导航、音乐播放、电话拨打等一系列操作,有效避免了因操作手机或车机带来的分心。此外,其强大的语义理解和自学习能力,使得它能逐步适应用户的口音和习惯,提供更个性化的服务。 在安装过程中,用户需要注意的是,"同行者4.1.2"包含了四个核心组件,分别是: 1. TXZCore.apk:这是同行者语音助手的基础框架,包含了语音识别和处理的核心算法,是整个应用运行的基础。 2. com.txznet.comm.base.BaseApplication.apk:这个文件可能包含了应用的公共模块和基础服务,为其他组件提供支持。 3. TXZsetting.apk:这

    市场拓展主管绩效考核表.xls

    市场拓展主管绩效考核表

    “线上购车3D全方位体验:汽车模型展示与个性化定制功能”,three.js案例- 线上购车3d展示(源码) 包含内容:1.汽车模型展示;2.汽车肤;3.轮毂部件更;4.开关车门动画;5.汽车尺寸测量

    “线上购车3D全方位体验:汽车模型展示与个性化定制功能”,three.js案例- 线上购车3d展示(源码) 包含内容:1.汽车模型展示;2.汽车肤;3.轮毂部件更;4.开关车门动画;5.汽车尺寸测量;6.自动驾驶;7.镜面倒影;8.hdr运用;9.移动端适配; 本为html+css+three.js源码 ,核心关键词:three.js案例; 线上购车3D展示; 汽车模型展示; 汽车换肤; 轮毂部件更换; 开关车门动画; 汽车尺寸测量; 自动驾驶; 镜面倒影; HDR运用; 移动端适配; HTML+CSS+three.js源码。,"Three.js源码:线上购车3D展示案例,含汽车模型、换肤、轮毂更换等九大功能"

    (数据权威)中国城市_县域统计面板数据二合一

    数据名称:2000-2022年各县市区主要社会经济发展指标面板数据 数据类型:dta格式 数据来源:中国县域统计

    120页-环卫车项目初步方案.pdf

    一、智慧环卫管理平台的建设背景与目标 智慧环卫管理平台的建设源于对环卫管理全面升级的需求。当前,城管局已拥有139辆配备车载GPS系统、摄像头和油耗传感器的环卫车辆,但环卫人员尚未配备智能移动终端,公厕也缺乏信息化系统和智能终端设备。为了提升环卫作业效率、实现精细化管理并节省开支,智慧环卫管理平台应运而生。该平台旨在通过信息化技术和软硬件设备,如车载智能终端和环卫手机App,实时了解环卫人员、车辆的工作状态、信息和历史记录,使环卫作业管理透明化、精细化。同时,平台还期望通过数据模型搭建和数据研读,实现更合理的环卫动态资源配置,为环卫工作的科学、健康、持续发展提供决策支持。 二、智慧环卫管理平台的建设内容与功能 智慧环卫管理平台的建设内容包括运行机制体制建设、业务流程设计、智慧公厕系统建设、网络建设、主机和储存平台需求、平台运维管理体系、硬件标准规范体系以及考核评价体系等多个方面。其中,智慧公厕系统建设尤为关键,它能实时监控公厕运行状态,保障公厕的清洁和正常运行。平台建设还充分利用了现有的电子政务网络资源,并考虑了有线和无线网络的需求。在功能上,平台通过普查、整合等手段全面收集环卫车辆、企业、人员、设施、设备等数据,建立智慧环卫基础数据库。利用智能传感、卫星定位等技术实现环卫作业的在线监管和远程监控,实现对道路、公共场所等的作业状况和卫生状况的全面监管。此外,平台还建立了环卫作业网格化管理责任机制,实现从作业过程到结果的全面监管,科学评价区域、部门、单位和人员的作业效果。 三、智慧环卫管理平台的效益与风险规避 智慧环卫管理平台的建设将带来显著的环境、经济和管理效益。环境方面,它将有力推进环境卫生监管服务工作,改善环境卫生状况,为人民群众创造更加清洁、卫生的工作和生活环境。经济方面,通过智慧化监管,大大降低了传统管理手段的成本,提高了监管的准确性和效率。管理方面,平台能够追踪溯源市民反映的问题,如公厕异味、渣土车辆抛洒等,并找到相应的责任单位进行处置,防止类似事件再次发生。同时,平台还拥有强大的预警机制功能,能够在很多环卫问题尚未出现前进行处置。然而,平台建设也面临一定的风险,如部门协调、配合问题,建设单位选择风险以及不可预测的自然灾害等。为了规避这些风险,需要加强领导、统一思想,选择优秀的系统集成商承接项目建设,并做好计算机和应用系统的培训工作。同时,也要注意标准制定工作和相关法律法规的制定工作,以保证系统建设完成后能够真正为环卫管理工作带来便利。

    36 -企业管理主管绩效考核表1.xlsx

    36 -企业管理主管绩效考核表1

    1.1 -1.4 工程代码

    1.1 -1.4 工程代码

    USDT合约,USDT智能合约

    USDT合约,USDT智能合约

    基于姿态估计三维人脸形状重建.pdf

    基于姿态估计三维人脸形状重建.pdf

    一般员工绩效考核表模板(通用版) (2).xls

    一般员工绩效考核表模板(通用版) (2)

    全国295个地级市2011-2022互联网宽带接入用户数互联网普及率(数据权威)

    全国各省295地级市互联网普及率、互联网用户数、每百人互联网宽带用户(2011-2022年) 数据年份:2011-2022年(2022存在部分缺失) 数据范围:全国各省295个地级市 数据来源:地方统计局

    (数据权威)碳排放、碳中和、碳交易、碳金融、碳计算、碳建模资料

    一、各省、分行业CO2排放、283个地级市碳排放及计算过程 2.分行业二氧化碳排放量 在这里插入图片描述 3、280多个地级市碳排放及计算过程 二、碳中和文献、最新政策、碳金融数据+数学建模 1.二氧化碳减排规划,碳金融数据收集及数学建模 2.碳中和政策和下载量最高的碳中和论文 三、碳排放+碳市场+碳交易+碳中和+碳排放核算Excel自动计算表 全行业碳排放核算Excel自动计算表 四、碳交易数据 五、主要能源碳排放计算参数

    第20讲:自定义类型:结构体.pdf

    第20讲:自定义类型:结构体

    视觉跟踪算法综述.pdf

    视觉跟踪算法综述.pdf

    MATLAB超效率SBM-DEA模型代码详解:简易操作指南及期望与非期望产出的超效率分析,附Malmquist指数与分解功能,MATLAB的超效率SBM-DEA模型代码(有安装教程和内容讲解之类的东西

    MATLAB超效率SBM-DEA模型代码详解:简易操作指南及期望与非期望产出的超效率分析,附Malmquist指数与分解功能,MATLAB的超效率SBM-DEA模型代码(有安装教程和内容讲解之类的东西),操作很简单 可以做期望产出和非期望产出的超效率和非超效率sbm模型和Malmquist指数和分解 ,MATLAB; SBM-DEA模型; 超效率SBM-DEA; 安装教程; 内容讲解; 期望产出; 非期望产出; 超效率与非超效率sbm模型; Malmquist指数; 分解。,"MATLAB超效SBM-DEA模型代码:非期望产出分析的便捷工具"

    人事行政主管绩效考核评分表.xls

    人事行政主管绩效考核评分表

    人力资源管理工具绩效考核excel模板.xlsx

    人力资源管理工具绩效考核excel模板

Global site tag (gtag.js) - Google Analytics