wps宏编辑器案例1-自定义函数使用

news2025/1/13 17:50:09

某公司考情和请假系统是2套独立的系统,人资在月底做考勤统计的时候需要把考勤系统导出的考勤信息表和OA请假流程导出的请假信息表进行合并,得出人员真实的考勤情况。比如员工“忠达”在考勤系统全显示缺勤,实际上请假系统里有4天请假,也就是说考勤系统应该显示4天是请假而不是缺勤。
之前都是人资专员手动肉眼比较,看考勤信息表中缺勤的记录里面,在请假信息里是否有,有则纠正考勤信息表的缺勤,由原来的缺勤改成请假,这个过程比较低效,而且容易眼花出错。为此,利用wps的JS宏编辑器编写了一个自定义函数getWorkLeaveInfo,我们只要在原考勤信息表中增加两列分别调用getWorkLeaveInfo即可,高效且不会出错,具体实现如下。

1、考勤信息表展示

在这里插入图片描述
主要有:考勤人员姓名,部门,上班考勤时间、状态,下班考勤时间、状态,考勤日期信息,月底从考勤系统导出。

2、请假信息表

在这里插入图片描述
主要由:申请人姓名、部门,申请日期,请假原因,请假类型,请假开始、结束日期、时长等信息,月底从OA系统导出。

3、自定义函数getWorkLeaveInfo编写

1)函数功能需求

如图1黄色高亮背景区域列所示,在考勤信息表增加2列:上班状态2、下班状态2,要求:

  • 当日上班状态缺勤的情况下,去比对请假信息表里该天是否有请假,有则返回请假类型,没有则返回缺勤;
  • 当日下班状态缺勤的情况下,去比对请假信息表里该天是否有请假,有则返回请假类型,没有则返回缺勤;

2)具体代码

function getWorkLeaveInfo(empName, kqDate, kqBanci, kqStatus) {
	// 获取请假、出差信息
	// empName: 姓名, kqDate:考勤日期, kqBanci:1-上午,2-下午
	// 08:00--13:00, 13:00--18:00
	kqStatus = kqStatus ? kqStatus.Value2 : "缺勤";
	if (!empName || !kqDate || !kqBanci) return kqStatus;
	let sheetQJ = Application.Worksheets.Item("请假信息");
	let amStart = "08:00", amEnd = "13:00", pmStart = "13:00", pmEnd = "18:00";
	kqDate = kqDate.Value2.replace(/^\s|\s$/g,"");		// 去除空格
	let strKqStart = kqDate + " " + (kqBanci == 1 ? amStart : pmStart);
	let strKqEnd = kqDate + " " + (kqBanci == 1 ? amEnd : pmEnd);
	let dateKqStart = Date.parse(strKqStart.replace(/-/g, '/'));
	let dateKqEnd = Date.parse(strKqEnd.replace(/-/g, '/'));
	if (kqStatus == "正常上班" || kqStatus == "正常下班") return kqStatus;	

	for (let i = 1; i < 2000; i++) {
		if (! sheetQJ.Cells.Item(i, 1).Value2) break;
		if (sheetQJ.Cells.Item(i, 1).Value2 == empName) {	// 找人
			let strStart = sheetQJ.Cells.Item(i, 6).Value2 + " " + sheetQJ.Cells.Item(i, 7).Value2;
			let strEnd = sheetQJ.Cells.Item(i, 8).Value2 + " " + sheetQJ.Cells.Item(i, 9).Value2;
			let dateStart = Date.parse(strStart.replace(/-/g, '/'));
			let dateEnd = Date.parse(strEnd.replace(/-/g, '/'));
			if (dateKqStart >= dateStart && dateKqEnd <= dateEnd) {
				return sheetQJ.Cells.Item(i, 5).Value2;
			}
		}
	}
	return kqStatus;
}

3)代码说明

  • 参数说明:

    • empName 人员姓名,此处理想情况应使用工号
    • kqDate 考勤日期
    • kqBanci 1-上午(上班),2-下午(下班)
    • kqStatus,考勤系统中显示的考勤状态
  • 简单逻辑

    • kqStatus为正常上班或正常下班,则直接返回
    • 自上而下根据姓名比对,且考勤日期+上下班时间,要在请假开始、结束时间段内
    • 考勤信息表默认2000行,当读到空行比对结束,可修改行数
  • 实现方式,比对的方式还可以通过range读取所有有效单元格,然后循环单元格来实现,具体见下个案例。

4、自定义函数使用

单元格中引用自定义函数getWorkLeaveInfo即可,如下图所示。
在这里插入图片描述

5、案例代码获取

请到gitee获取,https://gitee.com/zongtong2046/jsexcel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

16、Web原生组件注入(Servlet、Filter、Listener)

文章目录 1、使用Servlet API2、使用RegistrationBean 【尚硅谷】SpringBoot2零基础入门教程-讲师&#xff1a;雷丰阳 笔记 路还在继续&#xff0c;梦还在期许 1、使用Servlet API ServletComponentScan(basePackages “com.atguigu.admin”) :指定原生Servlet组件都放在那里…

全景天窗式科普数据仓库

数据仓库是一个面向主题的、集成的、随时间变化但信息本身相对稳定的数据集合&#xff0c;用于支持管理决策过程。其本质就是完成从面向业务过程数据的组织管理到面向业务分析数据的组织和管理的转变过程&#xff0c;也是商业智能BI中数据仓库的主要作用。 数据仓库 - 派可数据…

Spring Boot 定时任务

Spring Boot 提供了方便的注解来实现定时任务。下面是定时任务注解的详细教程&#xff1a; 一、添加依赖 要使用 Spring Boot 的定时任务注解&#xff0c;首先需要在项目中确认已添加过spring-boot-starter的依赖。 <dependency><groupId>org.springframework.b…

【youcans的深度学习 D01】PyTorch例程:从极简线性模型开始

欢迎关注『youcans的深度学习』系列 【youcans的深度学习 D01】PyTorch 例程&#xff1a;从极简线性模型开始 1. PyTorch 建模的基本步骤2. 线性模型的结构3. 建立 PyTorch 线性模型3.1 准备数据集3.2 定义线性模型类3.3 建立一个线性模型3.4 模型训练3.5 模型推断 4. PyTorch …

java-处理xml格式数据

处理xml格式数据 前言一、java处理xml格式数据1、 生成XML格式数据2、 解析XML格式数据 二、问题三、常用类及方法介绍 前言 dom4j是java中的XML API&#xff0c;性能优异、功能强大、开放源代码。 也是所有解析XML文件方法中最常用的&#xff01; 一、java处理xml格式数据 …

榜单发布 新能源乘用车OBC赛道进入转型升级周期

新能源汽车尤其是纯电动汽车市场的快速普及&#xff0c;也带动一批相关核心零部件厂商做大做强。比如&#xff0c;以车载充电机OBC及集成电源行业为例&#xff0c;威迈斯、富特科技等数家公司正在冲刺IPO。 目前&#xff0c;车载电源领域产品主要分为三种&#xff1a;一是单一…

步入AIGC时代,展望人工智能发展

步入AIGC时代&#xff0c;展望人工智能发展 0. 前言1. 步入 AIGC 时代1.1 人工智能简介1.2 AIGC 简介1.3 AIGC 发展与应用 2. CSIG 企业行——走进合合信息2.1 活动介绍2.2 走进合合信息 3. 文档图像处理中的底层视觉技术3.1 什么是底层视觉3.2 智能图像处理技术3.3 智能图像处…

消息中间件RabbitMQ---概述和概念 【一】

1、概述 1、大多应用中&#xff0c;可通过消息服务中间件来提升系统异步通信、扩展解耦能力 2、消息服务中两个重要概念&#xff1a; 消息代理&#xff08;message broker&#xff09;和目的地&#xff08;destination&#xff09; 当消息发送者发送消息以后&#xff0c;将由…

C语言中数据结构——顺序表

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

java多线程详细讲解 线程的创建、线程的状态、synchronized锁、Volatile关键字、和cas锁(自旋锁 乐观锁 无锁)

java多线程详细讲解 线程的创建、线程的状态、synchronized锁、Volatile关键字、和cas锁&#xff08;自旋锁 乐观锁 无锁&#xff09; 一、线程的概念二、创建线程的三种方式三、线程方法Sleep、Yield、Join四、线程的执行状态五、synchronized关键字1.为什么要上锁?2.锁定的内…

SDL初识(1)

简介 SDL(Simple DirectMedia Layer) 是一个跨平台开发库&#xff0c;旨在通过 OpenGL 和 Direct3D 提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。 SDL 支持 Windows、Mac OS X、Linux、iOS 和 Android。可以在源代码中找到对其他平台的支持。SDL 是用 C 语言编写的…

JavaScript【六】JavaScript中的字符串(String)

文章目录 &#x1f31f;前言&#x1f31f;字符串(String)&#x1f31f;单引号和双引号的区别&#x1f31f;属性&#x1f31f; length :字符串的长度 &#x1f31f; 方法&#x1f31f; str.charAt(index);&#x1f31f; str.charCodeAt(index);&#x1f31f; String.fromCharCod…

死磕“增长”:火山引擎的实用主义

作者 | 曾响铃 文 | 响铃说 在刘慈欣的科幻小说《三体》中&#xff0c;地外文明为了封锁地球科技&#xff0c;在天文台向地球科学家展现了「宇宙闪烁」这一奇观&#xff0c;试图颠覆人类的认知&#xff0c;从而影响科技进步&#xff0c;促使地球科技发展陷入停滞。 如今&…

给你们讲个笑话——低代码会取代程序员

今天是正经男&#xff0c;我们严肃讨论一下一直以来争吵不休的取代问题。 低代码开发平台&#xff0c;低代码技术会取代开发人员么&#xff1f; 一、背景 低代码开发平台的普及&#xff0c;让很多公司对快速生成应用抱有很大期望。甚至有人认为&#xff0c;低代码开发平台未来…

MTLAB绘图

这里写目录标题 一、图例1、散点图 二、绘图1、总体图形参数2、坐标、图框、网格图框去上右边框小刻度网格坐标范围和刻度控制旋转 坐标、刻度 3、图例图例位置和方向 Location和Orientation图例加标题 、分多列 4、文本 字、字体、字号5、线型 符号6、颜色栏 colorbar7、颜色8…

【技能分享】CAD转SHP最好的方法

1、利用 ArcToolsbox 工具先将 DWG 文件转为 MDB 通过 CASS 软件生成的 DWG 文件&#xff0c;字段中包含有很多属性内容&#xff0c;所以我们先将 DWG 格式 的文件转换为 MDB 格式&#xff0c;再通过 MDB 转换为 SHP 格式数据进行整理。具体步骤如下&#xff1a; 通过 ArcTool…

2023Mathorcup高校数学建模挑战赛ABCD选题建议

提示&#xff1a;本科同学尽量选择C、D题进行作答&#xff0c;获奖率相对会高。C君认为的难度&#xff1a;AD<C<B&#xff0c;开放度&#xff1a;B<C<A<D 。 A题 量子计算机在信用评分卡组合优化中的应用 这道题目是传统的运筹学题目。需要建立客户信用等级的…

阿里ARouter 路由框架解析

一、简介 众所周知&#xff0c;在日常开发中&#xff0c;随着项目业务越来越复杂&#xff0c;项目中的代码量也越来越多&#xff0c;如果维护、扩展、解耦等成了一个非常头疼问题&#xff0c;随之孕育而生的诸如插件化、组件化、模块化等热门技术。 而其中组件化中一项的难点&…

Spring Cloud 之五:Feign使用Hystrix

系列目录&#xff08;持续更新。。。&#xff09; Spring Cloud之一&#xff1a;注册与发现-Eureka工程的创建 Spring Cloud之二&#xff1a;服务提供者注册到Eureka Server Spring Cloud之三&#xff1a;Eureka Server添加认证 Spring Cloud之四&#xff1a;使用Feign实现…

camunda如何监控流程执行

在 Camunda 中&#xff0c;可以使用 Camunda 提供的用户界面和 API 来监控流程的执行情况。以下是几种常用的监控流程执行的方式&#xff1a; 1、使用 Camunda Cockpit&#xff1a;Camunda Cockpit 是 Camunda 官方提供的流程监控和管理工具&#xff0c;可以在浏览器中访问 Co…