Execl数据表格示例:
宏编程代码:
/**
* 开发:泛华
* 时间:2023年5月19日16:40:19
* 版本:1.0.0
* 打包构建:false
*/
//用户使用手册:
// 新建execl表格中需拥有两个表(操作表,结果表)
// 此版本为初代版本,需从代码中进行数据更替操作
// List_info变量为 计算单元格信息 以数组排列
// 数组格式:[姓名单元格位置,数据单元格位置,单元格开始位置,单元格结束地址]
// 分别为: [ X , X , Y , Y ]
//入口函数
function Main()
{
// 计算单元格配置
let List_info = [["C","D",3,32],["G","H",3,32],["K","L",3,31]]
// 函数调用
List_Sum_Attr(List_info);
}
// 函数封装 为构建回调 合并分析计算插入
function List_Sum_Attr(info_s,name_s){
let List_info = info_s
let name_all = [
"杨镇熊","唐铭","蔡迎宾","柯美杨",
"仲友奇","蔡伦荣","苏登富","何元朋",
"石宝攀","徐廷银","李勇","胡志斌",
"曾连斌","杜灵权","王书国","姚斌",
"陈强"]
let is_Attr=[];
// 循环读取配置信息 决定调用几次函数
for(let i =0 ;i < List_info.length;i++){
// 定义变量 调用函数并返回值 返回值以json格式插入数据
let SumNmeAllRe = JSON.parse(SumNmeAll(List_info[i][0],List_info[i][1],List_info[i][2],List_info[0][3]))
// 循环json值 所有函数运行的返回值
for(let i = 0 ; i < SumNmeAllRe.length;i++){
// 拆分 合并所有值
is_Attr.push(SumNmeAllRe[i])
}
}
//初始化值 单元格定位初始化
let is_index_excel = 0;
//循环遍历所有姓名
for(let i = 0 ;i < name_all.length; i++){
// 初始化数据
//姓名 名 KEY
let list_name_v = "";
//结果 值 VALUE
let list_numebr_v = 0;
// 循环遍历姓名数组 被分析出的姓名
for(let j = 0; j < is_Attr.length; j++){
// 定义数据类型 组合转换数据为JSON
let json_text= JSON.parse(is_Attr[j].replace('{','{"').replace(':','":'))
// 判断数据是否存在 所有用户名 是否 包含计算用户名
if(Object.keys(json_text).toString() == name_all[i]){
// 赋值 给予姓名
list_name_v = name_all[i]
// 赋值 给予结果 相同结果自动累加
list_numebr_v += parseFloat(Object.values(json_text).toString())
}
}
// 判断是否为有效数据
if(list_numebr_v != 0){
// 打印结果
console.log(list_name_v)
console.log(list_numebr_v)
console.log("----------------------")
// 变量累加 单元格自提
is_index_excel++
// 选择单元格
Worksheets("结果表").Range("A"+is_index_excel).Select()
// 插入姓名数据
Selection.Formula = list_name_v;
// 选择单元格
Worksheets("结果表").Range("B"+is_index_excel).Select()
// 插入结果数据
Selection.Formula = list_numebr_v;
}
}
}
//函数封装 未构建回调 拆解提取操作函数
function SumNmeAll(List_Key,List_Value,up_number,end_number){
// 变量配置 --- 配置所需条件 ---配置信息
let execl_info={
// 拥有姓名
name_all:[
"杨镇熊","唐铭","蔡迎宾","柯美杨",
"仲友奇","蔡伦荣","苏登富","何元朋",
"石宝攀","徐廷银","李勇","胡志斌",
"曾连斌","杜灵权","王书国","姚斌",
"陈强"],
// 计算开始序号
list_getup:up_number,
// 计算结尾序号
list_end:end_number,
}
let is_Attr =[]
// 循环列表 =========== 获取列表数据 ===============
for(;execl_info.list_getup<=execl_info.list_end;execl_info.list_getup++){
let list_Key = Worksheets("操作表").Range(List_Key+execl_info.list_getup).Value()
let list_Value = Worksheets("操作表").Range(List_Value+execl_info.list_getup).Value()
//===================姓名提取=======================
//判断是否为空白效数据
if(list_Value!=""){
let add_json_key;
let add_json_value;
// 循环姓名列表
for(let i=0;i<execl_info.name_all.length;i++){
// 定义姓名
let list_Key_if = execl_info.name_all[i]
// 判断是否包含姓名
if(list_Key.toString().indexOf(list_Key_if)!=-1){
// 给予数据
add_json_key = list_Key_if
}
}
// 给予数据
add_json_value = list_Value;
// 存储数据
let add_json = "{"+add_json_key+":"+add_json_value+"}"
is_Attr.push(add_json)
}
}
// 读取数据
//console.log(JSON.stringify(is_Attr))
//返回数据
return JSON.stringify(is_Attr)
}
结果显示表: