Files
2026-05-24 04:36:41 +00:00

822 lines
30 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/UPDATE.js
// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/UPDATE.js
// # Repo: imoki/sign_script
// # Path: polymerization/UPDATE.js
// # UploadedAt: 2025-08-25T21:29:14+08:00
// # SHA256: 891e820ae0a3f9c63d3f0a87b92ed14ec831b0088c9e63b2a4eb16e40d12d287
// # Category: 微信小程序/抓包版
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
//
/*
脚本名称UPDATE.js
脚本兼容: airsript 1.0、airscript 2.0
更新时间20250504
备注:更新脚本。用于自动生成表格,以及追加表格数据
适配airsript 1.0版本及airscript 2.0版本
其他:若想添加新内容,请搜索(修改这里),按照格式修改
*/
var confiWorkbook = 'CONFIG' // 主配置表名称
var pushWorkbook = 'PUSH' // 推送表的名称
var emailWorkbook = 'EMAIL' // 邮箱表的名称
var version = 1 // 版本类型自动识别并适配。默认为airscript 1.0否则为2.0Beta
var separator = "##########MOKU##########" // 分割符分割消息。可用于PUSH.js灵活推送
var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送
var messageDistance = 100; // 消息距离用于匹配100字符内最近的行
// 表中激活的区域的行数和列数
var workbook = [] // 存储已存在表数组
var row = 0;
var col = 0;
var maxRow = 100; // 规定最大行
var maxCol = 22; // 规定最大列
var colNum = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V']
// CONFIG表内容
// 推送昵称(推送位置标识)选项若“是”则推送“账户名称”若账户名称为空则推送“单元格Ax”这两种统称为位置标识。若“否”则不推送位置标识
// 存放CONFIG表内容标题+标题下内容
var configContent = [];
// 实际写入CONFIG表的值
// CONFIG表标题
configTitle = ['工作表的名称', '备注', '只推送失败消息(是/否)', '推送昵称(是/否)', '是否存活', '程序结束时间', '消息', '推送时间', '推送方式', '是否通知', '加入消息池', '推送优先级', '当日可推送次数', '当日剩余推送次数']
// 定义CONFIG表标题下内容的默认值
var configBodyDefault = ['xxx', '', '否', '是', '是', '', '', '', '@all', '是', '否', '0', '1', ''];
// CONFIG表标题下内容
var configBody = [
{ name: 'remind', note: '日期提醒工具',},
{ name: 'qrcode', note: '二维码生成工具',},
{ name: 'jitang', note: '鸡汤',},
{ name: 'imgcover', note: '随机封面',},
{ name: 'weekplan', note: '周安排工具',},
{ name: 'todayhistory', note: '历史上的今天',},
{ name: 'oilprice', note: '今日油价',},
{ name: 'airabsorbed', note: '全国空气吸收剂量率',},
{ name: 'smzdm', note: '什么值得买抽奖',},
{ name: 'toollu', note: '在线工具',},
{ name: 'zaoan', note: '早安问候语',},
{ name: 'wanan', note: '晚安问候语',},
{ name: 'bilihot', note: '哔哩哔哩热搜榜',},
{ name: 'dyhot', note: '抖音热搜榜',},
{ name: 'ddmc_ddyt', note: '叮咚鱼塘',},
{ name: 'wbhot', note: '微博热搜榜',},
{ name: 'zhhot', note: '知乎热搜榜',},
{ name: 'bdhot', note: '百度热搜榜',},
{ name: 'xmly', note: '喜马拉雅',},
{ name: 'ssphot', note: '少数派热榜',},
{ name: 'en', note: '希沃白板',},
{ name: 'bdsl', note: '百度收录',},
{ name: 'quark', note: '夸克网盘',},
{ name: 'huluxia', note: '葫芦侠3楼',},
{ name: 'steamrank', note: 'steam游戏在线人数'},
{ name: 'oneyan', note: '随机一句一言',},
{ name: 'ztebbs', note: '中兴社区',},
{ name: 'mi', note: '小米商城',},
{ name: 'kanxue', note: '看雪论坛',},
{ name: 'day60s', note: '每天60秒读懂世界'},
{ name: 'vivo', note: 'vivo社区',},
{ name: 'chouq', note: '随机抽签',},
{ name: 'kfc', note: 'KFC疯狂星期四搞笑语录',},
{ name: 'golo', note: 'golo汽修大师',},
{ name: 'xingzuo', note: '星座运势',},
{ name: 'tzgsc', note: '挑战古诗词',},
{ name: 'chinadsl', note: '宽带技术网',},
{ name: 'imgecy', note: '随机二次元图片',},
{ name: 'imgbing', note: 'Bing每日图片',},
{ name: 'ztemall', note: '中兴商城',},
{ name: 'wnflb', note: '万能福利吧',},
{ name: 'wangzhe', note: '王者荣耀英雄介绍',},
{ name: 'rsdjs', note: '人生倒计时',},
{ name: 'fwxs', note: '废文小说',},
{ name: 'imgavatar', note: '随机头像',},
{ name: 'shenhuifu', note: '神回复',},
{ name: 'imglandscape', note: '随机风景图片',},
{ name: 'miyu', note: '谜语', },
{ name: 'telsaorao', note: '骚扰电话查询',},
{ name: 'favicon', note: '网站图标获取',},
{ name: 'imgphone', note: '随机手机壁纸',},
{ name: 'kyt', note: '科研通',},
{ name: 'parsdata', note: '伊朗域名注册优惠码',},
{ name: 'quarksave', note: '夸克订阅更新自动转存',},
{ name: 'dailynewscn', note: '中国日报',},
{ name: 'telgsd', note: '手机号归属地',},
{ name: 'dwz', note: '短网址生成',},
{ name: 'fjzh', note: '简繁体转换',},
{ name: 'xpnc', note: '兴攀农场',},
{ name: 'qwxh', note: '趣味笑话',},
{ name: 'rshy', note: '人生话语',},
{ name: 'qcs', note: '屈臣氏',},
{ name: 'meiju', note: '随机美句摘抄文案',},
{ name: 'hzh', note: '华住会',},
{ name: 'eswxlt', note: '恩山无线论坛',},
{ name: 'weimei', note: '随机唯美文案',},
{ name: 'xmdl', note: '熊猫网络',},
{ name: 'lnglat', note: '经纬度解析',},
{ name: 'hfweather', note: '和风天气', pushPriority: '1',},
{ name: 'piaofang', note: '电影票房排行',},
{ name: 'ciba', note: '词霸每日一句',},
{ name: 'deepseek', note: 'deepseek分析工具',},
// { name: '(修改这里)', note: '(修改这里)',}, // 添加新增内容
];
// 定义字段映射关系,标题和键的对应关系,用于动态个性化处理
var configTitleMapping = {
'工作表的名称': 'name',
'备注': 'note',
'只推送失败消息(是/否)': 'pushFailureOnly',
'推送昵称(是/否)': 'pushNickname',
'是否存活': 'isAlive',
'更新时间': 'updateTime',
'消息': 'message',
'推送时间': 'pushTime',
'推送方式': 'pushMethod',
'是否通知': 'notify',
'加入消息池': 'addToMessagePool',
'推送优先级': 'pushPriority',
'当日可推送次数': 'dailyPushLimit',
'当日剩余推送次数': 'remainingDailyPushes',
};
// PUSH表内容
var pushContent = [
['推送类型', '推送识别号(如token、key)', '是否推送(是/否)'],
['bark', 'xxxxxxxx', '否'],
['pushplus', 'xxxxxxxx', '否'],
['ServerChan', 'xxxxxxxx', '否'],
['email', '若要邮箱发送请配置EMAIL表', '否'],
['dingtalk', 'xxxxxxxx', '否'],
['discord', '请填入镜像webhook链接,自行处理Query参数', '否'],
['qywx', 'xxxxxxxx', '否'],
['xizhi', 'xxxxxxxx', '否'],
['jishida', 'xxxxxxxx', '否'],
['wxpusher', 'appToken|uid', '否'],
]
// email表内容
var emailContent = [
['SMTP服务器域名', '端口', '发送邮箱', '授权码'],
['smtp.qq.com', '465', 'xxxxxxxx@qq.com', 'xxxxxxxx']
]
// 分配置表内容
var subConfigContent = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)'],
['xxxxxxxx1', '是', '昵称1'],
['xxxxxxxx2', '否', '昵称2']
]
// 定制化分配置表内容,叮咚买菜
var subConfigDdmc = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'seedId_ddgy', 'propsId_ddgy', 'seedId_ddyt', 'propsId_ddty'],
['xxxxxxxx1', '是', '昵称1', '填果园seedId', '填果园propsId', '填鱼塘seedId', '填鱼塘propsId'],
['xxxxxxxx2', '否', '昵称2', '填果园seedId', '填果园propsId', '填鱼塘seedId', '填鱼塘propsId']
]
// 定制化分配置表内容WPS
var subConfigWps = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '转存PPT(是/否)', '是否渠道1打卡(是/否)', '是否渠道2打卡(是/否)', 'Signature(渠道2)'],
['xxxxxxxx1', '是', '昵称1', '否', '是', '否' , 'xxxxxxxx' ,],
['xxxxxxxx2', '否', '昵称2', '否', '是', '否' , 'xxxxxxxx' ,]
]
// 定制化分配置表内容,小米商城
var subConfigMi = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'mishop-client-id'],
['xxxxxxxx1', '是', '昵称1', '100'],
['xxxxxxxx2', '否', '昵称2', '100']
]
// 定制化分配置表内容golo汽修大师
var subConfigGolo = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'username', 'password'],
['xxxxxxxx1', '是', '昵称1', '此格填用户名', '此格填密码'],
['xxxxxxxx2', '否', '昵称2', '此格填用户名', '此格填密码']
]
// 定制化分配置表内容parsdata
var subConfigParsdata = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '优惠码'],
['xxxxxxxx1', '是', '昵称1', ''],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容qcs
var subConfigQcs = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'openId', 'unionId'],
['xxxxxxxx1', '是', '昵称1', '', ''],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容,恩山无线论坛
var subConfigEswxlt = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'openId', 'unionId'],
['xxxxxxxx1', '是', '昵称1', '', ''],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容xmdl
var subConfigXmdl = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'username', 'password'],
['xxxxxxxx1', '是', '昵称1', '此格填用户名', '此格填密码'],
['xxxxxxxx2', '否', '昵称2', '此格填用户名', '此格填密码']
]
// 定制化分配置表内容hfweather和风天气
var subConfigHfweather = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '省份/城市/区/经纬度/ID手动输入', '今日天气预报', '实时天气预报', '当天生活指数', '天气灾害预警', '逐小时天气预报', '分钟级降水','其他模式(可选)','消息过滤器(可选)','高级配置(可选)','实际定位(自动生成)','地区ID自动生成','经纬度(自动生成)','一致性校验(自动生成)','冗余观测站(自动生成)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '朝阳区', '是', '否', '否', '否', '否', '否', '', '', '', '', '', '', '', '', ''],
// ['xxxxxxxx2', '否', '昵称2', '是', '否', '否', '否', '否', '否', '', '', '', '', '', '', '', '', '']
]
// 定制化分配置表内容ciba词霸每日一句
var subConfigCiba = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '中文每日一句', '英文每日一句'],
['xxxxxxxx1', '是', '昵称1', '是', '是'],
['xxxxxxxx2', '否', '昵称2', '是', '是']
]
// 定制化分配置表内容deepseek
var subConfigDeepseek = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '模型', '提示词'],
['xxxxxxxx1', '是', '昵称1', 'deepseek-r1-distill-qwen-32b', '请用中文说明哪些运行失败了带上有趣的emoji限制在100字以内。'],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容remind
var subConfigRemind = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '提醒日期(自动生成)', '标题', '提醒单位', '月', '日'],
['xxxxxxxx1', '是', '昵称1', '', '🎂生日到啦!', '农历', '1', '1'],
['xxxxxxxx2', '否', '昵称2', '', '🥳提醒到啦!', '阳历', '11', '22']
]
// 定制化分配置表内容qrcode
var subConfigQrcode = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '二维码内容', '二维码(自动生成)'],
['xxxxxxxx1', '是', '昵称1', 'github.com/imoki', ''],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容weekplan
var subConfigWeekplan = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
['xxxxxxxx1', '是', '昵称1', '', '', '', '', '', '', '', '', '',],
['xxxxxxxx2', '否', '昵称2', '', '', '', '', '', '', '', '', '',]
]
// 定制化分配置表内容oilprice
var subConfigOilprice = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '地区', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '北京', '否'],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容bdsl
var subConfigBdsl = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '域名'],
['xxxxxxxx1', '是', '昵称1', 'github.com'],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容steamrank
var subConfigSteamrank = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', 'appid'],
['xxxxxxxx1', '是', '昵称1', '578080'],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容xingzuo
var subConfigXingzuo = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '星座', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '白羊座', '是'],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容wangzhe
var subConfigWangzhe = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '英雄名'],
['xxxxxxxx1', '是', '昵称1', '李白'],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容imgecy
var subConfigImgecy = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
['xxxxxxxx1', '是', '昵称1', ''],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容imgbing
var subConfigImgbing = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
['xxxxxxxx1', '是', '昵称1', ''],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容imgavatar
var subConfigImgavatar = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
['xxxxxxxx1', '是', '昵称1', ''],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容imglandscape
var subConfigImglandscape = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
['xxxxxxxx1', '是', '昵称1', ''],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容imgphone
var subConfigImgphone = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '图片(自动生成)'],
['xxxxxxxx1', '是', '昵称1', ''],
['xxxxxxxx2', '否', '昵称2', '']
]
// 定制化分配置表内容telsaorao
var subConfigTelsaorao = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '手机号','检测报告(自动生成)'],
['xxxxxxxx1', '是', '昵称1', '', ''],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容favicon
var subConfigFavicon = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '域名','网站图标(自动生成)'],
['xxxxxxxx1', '是', '昵称1', 'github.com', ''],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容telgsd
var subConfigTelgsd = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '手机号','归属地(自动生成)'],
['xxxxxxxx1', '是', '昵称1', '', ''],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容dwz
var subConfigDwz = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '域名','短网址(自动生成)'],
['xxxxxxxx1', '是', '昵称1', 'github.com', ''],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容fjzh
var subConfigFjzh = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '简体','繁体(自动生成)'],
['xxxxxxxx1', '是', '昵称1', '龙', ''],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容lnglat
var subConfigLnglat = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '经度', '纬度','结果(自动生成)'],
['xxxxxxxx1', '是', '昵称1', '', '', ''],
['xxxxxxxx2', '否', '昵称2', '', '', '']
]
// 直接推送类
// 定制化分配置表内容dailynewscn
var subConfigdailynewscn = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)', '新闻条数'],
['xxxxxxxx1', '是', '昵称1', '是', '全部'],
['xxxxxxxx2', '否', '昵称2', '', '10']
]
// 定制化分配置表内容airabsorbed
var subConfigairabsorbed = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)', '省份'],
['xxxxxxxx1', '是', '昵称1', '是', '北京'],
['xxxxxxxx2', '否', '昵称2', '', '']
]
// 定制化分配置表内容wbhot
var subConfigwbhot = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容zhhot
var subConfigzhhot = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容bdhot
var subConfigbdhot = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容ssphot
var subConfigssphot = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容kfc
var subConfigkfc = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容miyu
var subConfigmiyu = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容todayhistory
var subConfigtodayhistory = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容zaoan
var subConfigzaoan = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容wanan
var subConfigwanan = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容oneyan
var subConfigoneyan = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容chouq
var subConfigchouq = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容tzgsc
var subConfigtzgsc = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化分配置表内容shenhuifu
var subConfigshenhuifu = [
['cookie(默认20个)', '是否执行(是/否)', '账号名称(可不填写)', '直推(是/否)'],
['xxxxxxxx1', '是', '昵称1', '是',],
['xxxxxxxx2', '否', '昵称2', '',]
]
// 定制化表
var subConfig = {
"ddmc" : subConfigDdmc,
"wps" : subConfigWps,
"golo" : subConfigGolo,
"parsdata":subConfigParsdata,
"qcs":subConfigQcs,
"eswxlt":subConfigEswxlt,
"xmdl":subConfigXmdl,
"hfweather":subConfigHfweather,
"ciba":subConfigCiba,
"deepseek" : subConfigDeepseek,
"remind" : subConfigRemind,
"qrcode" : subConfigQrcode,
"weekplan" : subConfigWeekplan,
"oilprice" : subConfigOilprice,
"bdsl" : subConfigBdsl,
"steamrank" : subConfigSteamrank,
"xingzuo" : subConfigXingzuo,
"wangzhe" : subConfigWangzhe,
"imgecy" : subConfigImgecy,
"imgbing" : subConfigImgbing,
"imgavatar" : subConfigImgavatar,
"imglandscape" : subConfigImglandscape,
"imgphone" : subConfigImgphone,
"telsaorao" : subConfigTelsaorao,
"favicon" : subConfigFavicon,
"telgsd" : subConfigTelgsd,
"dwz" : subConfigDwz,
"fjzh" : subConfigFjzh,
"lnglat" : subConfigLnglat,
// 直推
"dailynewscn" : subConfigdailynewscn,
"airabsorbed" : subConfigairabsorbed,
"wbhot" : subConfigwbhot,
"zhhot" : subConfigzhhot,
"bdhot" : subConfigbdhot,
"ssphot" : subConfigssphot,
"kfc" : subConfigkfc,
"miyu" : subConfigmiyu,
"todayhistory" : subConfigtodayhistory,
"zaoan" : subConfigzaoan,
"wanan" : subConfigwanan,
"oneyan" : subConfigoneyan,
"chouq" : subConfigchouq,
"tzgsc" : subConfigtzgsc,
"shenhuifu" : subConfigshenhuifu,
}
// var mosaic = "xxxxxxxx" // 马赛克
// var strFail = "否"
// var strTrue = "是"
main() // 入口
// CONFIG表添加超链接
function hypeLink(){
// console.log("添加超链接")
let workSheet= Application.Sheets(confiWorkbook) //配置表
// let workUsedRowEnd = workSheet.UsedRange.RowEnd //用户使用表格的最后一行
let rowcol = getRowCol()
let workUsedRowEnd = rowcol[0] // 行
// console.log(workUsedRowEnd)
for(let row = 2; row <= workUsedRowEnd; row++){
link_name=workSheet.Range("A" + row).Text
if (link_name == "") {
break; // 如果为空行,则提前结束读取
}
link_name ='=HYPERLINK("#'+link_name+'!$A$1","'+link_name+'")' //设置超链接
// console.log(link_name) // HYPERLINK("#PUSH!$A$1","PUSH")
if(version == 1){
// airscipt 1.0
workSheet.Range("A" + row).Value =link_name
}else{
// airscipt 2.0
workSheet.Range("A" + row).Value2 =link_name
}
}
}
// 判断表格行列数,并记录目前已写入的表格行列数。目的是为了不覆盖原有数据,便于更新
function determineRowCol() {
for (let i = 1; i < maxRow; i++) {
let content = Application.Range("A" + i).Text
if (content == "") // 如果为空行,则提前结束读取
{
row = i - 1; // 记录的是存在数据所在的行
break;
}
}
// 超过最大行了认为row为0从头开始
let length = colNum.length
for (let i = 1; i <= length; i++) {
content = Application.Range(colNum[i - 1] + "1").Text
if (content == "") // 如果为空行,则提前结束读取
{
col = i - 1; // 记录的是存在数据所在的行
break;
}
}
// 超过最大行了认为col为0从头开始
// console.log("✨ 当前激活表已存在:" + row + "行," + col + "列")
}
// 获取当前激活表的表的行列
function getRowCol() {
let row = 0
let col = 0
for (let i = 1; i < maxRow; i++) {
let content = Application.Range("A" + i).Text
if (content == "") // 如果为空行,则提前结束读取
{
row = i - 1; // 记录的是存在数据所在的行
break;
}
}
// 超过最大行了认为row为0从头开始
let length = colNum.length
for (let i = 1; i <= length; i++) {
content = Application.Range(colNum[i - 1] + "1").Text
if (content == "") // 如果为空行,则提前结束读取
{
col = i - 1; // 记录的是存在数据所在的行
break;
}
}
// 超过最大行了认为col为0从头开始
// console.log("✨ 当前激活表已存在:" + row + "行," + col + "列")
return [row, col]
}
// 激活工作表函数
function ActivateSheet(sheetName) {
let flag = 0;
try {
let sheet = Application.Sheets.Item(sheetName)
sheet.Activate()
// console.log("🍾 激活工作表:" + sheet.Name)
flag = 1;
} catch {
flag = 0;
// console.log("📢 无法激活工作表,工作表可能不存在")
// console.log("🪄 创建工作表:" + sheetName)
createSheet(sheetName)
}
return flag;
}
// 统一编辑表函数
function editConfigSheet(content) {
determineRowCol();
let lengthRow = content.length
let lengthCol = content[0].length
if (row == 0) { // 如果行数为0认为是空表,开始写表头
for (let i = 0; i < lengthCol; i++) {
if(version == 1){
// airscipt 1.0
Application.Range(colNum[i] + 1).Value = content[0][i]
}else{
// airscript 2.0(Beta)
Application.Range(colNum[i] + 1).Value2 = content[0][i]
}
}
row += 1; // 让行数加1代表写入了表头。
}
// 从已写入的行的后一行开始逐行写入数据
// 先写行
for (let i = 1 + row; i <= lengthRow; i++) { // 从未写入区域开始写
for (let j = 0; j < lengthCol; j++) {
if(version == 1){
// airscipt 1.0
Application.Range(colNum[j] + i).Value = content[i - 1][j]
}else{
// airscript 2.0(Beta)
Application.Range(colNum[j] + i).Value2 = content[i - 1][j]
}
}
}
// 再写列
for (let j = col; j < lengthCol; j++) {
for (let i = 1; i <= lengthRow; i++) { // 从未写入区域开始写
if(version == 1){
// airscipt 1.0
Application.Range(colNum[j] + i).Value = content[i - 1][j]
}else{
// airscript 2.0(Beta)
Application.Range(colNum[j] + i).Value2 = content[i - 1][j]
}
}
}
}
// 存储已存在的表
function storeWorkbook() {
// 工作簿Workbook中所有工作表Sheet的集合,下面两种写法是一样的
let sheets = Application.ActiveWorkbook.Sheets
sheets = Application.Sheets
// 打印所有工作表的名称
for (let i = 1; i <= sheets.Count; i++) {
workbook[i - 1] = (sheets.Item(i).Name)
// console.log(workbook[i-1])
}
}
// 判断表是否已存在
function workbookComp(name) {
let flag = 0;
let length = workbook.length
for (let i = 0; i < length; i++) {
if (workbook[i] == name) {
flag = 1;
console.log("✨ " + name + "表已存在")
break
}
}
return flag
}
// 创建表,若表已存在则不创建,直接写入数据
function createSheet(sheetname) {
// const defaultName = Application.Sheets.DefaultNewSheetName
// 工作表对象
if (!workbookComp(sheetname)) {
console.log("🪄 创建工作表:" + sheetname)
try{
Application.Sheets.Add(
null,
Application.ActiveSheet.Name,
1,
Application.Enum.XlSheetType.xlWorksheet,
sheetname
)
}catch{
// console.log("😶‍🌫️ 适配airscript 2.0版本")
version = 2 // 设置版本为2.0
let newSheet = Application.Sheets.Add(undefined, undefined, undefined, xlWorksheet)
// let newSheet = Application.Worksheets.Add()
newSheet.Name = sheetname
}
}
}
// airscript检测版本
function checkVesion(){
try{
let temp = Application.Range("A1").Text;
Application.Range("A1").Value = temp
console.log("😶‍🌫️ 检测到当前airscript版本为1.0进行1.0适配")
}catch{
console.log("😶‍🌫️ 检测到当前airscript版本为2.0进行2.0适配")
version = 2
}
}
// 主函数执行流程
function main(){
checkVesion() // 版本检测,以进行不同版本的适配
// 动态写入CONFIG表数组数据操作
// 加入标题
configContent[0] = configTitle
// 写入标题下内容
for (let i = 0; i < configBody.length; i++) {
let row = [];
for (let j = 0; j < configContent[0].length; j++) {
let fieldName = configContent[0][j];
let fieldValue = configBody[i][configTitleMapping[fieldName]];
if (fieldValue === undefined) {
fieldValue = configBodyDefault[j]; // 如果字段不存在,使用默认值
}
row.push(fieldValue);
}
configContent.push(row);
}
storeWorkbook()
// console.log("🪄 创建主分配表")
// const sheet = Application.ActiveSheet // 激活当前表
// sheet.Name = confiWorkbook // 将当前工作表的名称改为 CONFIG
createSheet(confiWorkbook)
ActivateSheet(confiWorkbook)
editConfigSheet(configContent) // editConfig()
// 加入跳转超链接
hypeLink()
// console.log("🪄 创建推送表")
createSheet(pushWorkbook)
ActivateSheet(pushWorkbook)
editConfigSheet(pushContent) // editPush()
// console.log("🪄 创建邮箱表")
createSheet(emailWorkbook)
ActivateSheet(emailWorkbook)
editConfigSheet(emailContent)
let length = configContent.length - 1
// console.log(length)
console.log("🍳 正在检索分配置表进行创建")
for (let i = 0; i < length; i++) {
let workbook = ""
let subworkbook = ""
// console.log(configContent[i+1][4])
if(configContent[i+1][4] == "是"){ // 存活的才生成表
// 部分表合并如ddmc_ddgy则以_为分割生成ddmc表
workbook = configContent[i+1][0].split("_")[0] // 使用下划线作为分隔符,取第一个部分)
ActivateSheet(workbook) // 根据CONFIG表来生成
editConfigSheet(subConfigContent)
// 检查是否有定制化内容,有则生成
try{
subworkbook = subConfig[workbook]
// console.log(subworkbook)
if(subworkbook != undefined){
ActivateSheet(workbook) // 激活分配置表
editConfigSheet(subworkbook)
// console.log("存在定制化内容")
}
}catch{
// 无定制化内容
// console.log("无定制化内容")
}
}
}
console.log("🎉 更新完成")
}