WPS通过js宏实现序列自动多级编号
满足批量增行时自动修改编号,以及编号自动根据层级调整
实现目的
测试用例,按树状分组,使结构清晰
待实现功能
美化以后有时间再说
- 代码还能优化,目前重新修改下单元格能实现效果,先上传一版
- 根据层级自动设置该行单元格样式
- 当某个用例不通过时,与父级一起突出显示。
效果预览
wps自动编号
实现代码
var isChange = true;
function Workbook_SheetChange(Sh, rg)
{
//修改单元格时触发
if(isChange){
//由于使用修改单元格触发,增加判断变量,修改内容完毕后恢复
Debug.GC();//触发垃圾回收
//单次有瑕疵
try{
checkAndChangeNum();//序列校验
}catch(e){
isChange = true;
}
}
}
function checkAndChangeNum()
{
isChange = false;
//--------↓↓↓↓↓---配置参数---↓↓↓↓↓--------
let titleRow = 1;//标题占用行数---根据实际修改
let orderTitle = '序列';//排序的字段名。单元格格式不能为数值!!!否则1.10会变为1.1
let maxEmptyRow = 9;//一次性最大增行数,避免多余判断
let maxEmptyCol = 9;//一次性最大增列数,避免多余判断
//--------↑↑↑↑↑---配置参数---↑↑↑↑↑--------
//最好指定工作表对象,不容易出错
let wb = ThisWorkbook
let sht = wb.ActiveSheet
let isBreak = false;
let curTitleRow = 0;//遍历标题行,最终为需排序字段所在行---修改序号起始行
let curTitleCol = 0;//遍历标题列,最终为需排序字段所在列
//遍历获取需排序字段所在行列
for(var i=0;i<titleRow;i++){
curTitleRow = i+1;
Debug.Print("开始遍历标题第:"+curTitleRow+"行");
let rowNum = 0;//当前行
let emptyRow = 0;//连续空行
let titles = sht.Range(''+curTitleRow+':'+curTitleRow+'')//遍历标题行数据,匹配字段排序的字段名
for( title of titles){
if(title.Text==orderTitle){
curTitleCol = title.Column;
//获取到需要自动修改序号列
isBreak = true;
break;
}
if(rowNum!=title.Row){
rowNum=title.Row
emptyRow = 0;//计次重置
}else if(title.Text==null || title.Text==''){
emptyRow++;
}
if(emptyRow>maxEmptyRow){
Debug.Print("连续空值超"+maxEmptyRow+"次,跳出循环。");
break;
}
}
//判断是否拿到目标所在列,拿到之后跳出循环
if(isBreak){
Debug.Print("获取到排序字段所在行:"+curTitleRow+",列:"+curTitleCol);
break;
}else{
Debug.Print("继续循环下一行");
}
}
//将列数转为列名,可能有更好方法
let colNames = ["a","b","c","d","e","f","g","h"</