|
|
一行展开成一个表。 //JSA代码
一行在简表区,简表在工作表靠右;一个表在工作表左侧。
选中简表区某一行,点击按钮,先展开成同表的分配表 再填写另一个文件编码表,最后保存。
- function 随心看(){ //生成目标分配表、扩展编码表
- console.clear();
- let 目标簿=ActiveWorkbook;
- let 表路径=目标簿.Path;
- let 表文件名=目标簿.Name;
- let 月目标序号=表文件名.indexOf('月目标');
- if(月目标序号==-1){alert("文件名找不到“月目标”!");return;}
- let 月份=表文件名.slice(0,月目标序号);
- let 扩展编码表文件名=表路径+"\\"+月份+"月商品导入.xlsx" //扩展编码表
- if(!FileSystem.Exists(扩展编码表文件名)){alert("找不到 扩展编码表:\n"+扩展编码表文件名);return;}
- if(表文件名.indexOf("(随心看任务)")!=-1){ //文件名包含随心看
- let 表=ActiveSheet;
- let 表名=表.Name;
- console.log(表名);
- if(表名.indexOf("随心看任务")!=-1){ //表名包含随心看
- //简表头尾列号
- let 简表首内容='序号',左侧非空和=-4170,右侧非空格=-4161;
- let 简表头首格=表.Range("1:1").Find(简表首内容);
- let 简表头尾格=简表头首格.End(右侧非空格);
- let 简表首列号=简表头首格.Column,简表尾列号=简表头尾格.Column;
-
- //单行判断与选中行号
- let 选区=Selection;
- let 选区地址=选区.Address();
- let 选区行号数串=选区地址.replace(/[^\d]+/g,',');
- let 选区行号数组=选区行号数串.split(',');
- let 选中行对象={},选区行号;
- for(let i=0;i<选区行号数组.length;i++){
- if(+选区行号数组[i]!=0){
- 选区行号=选区行号数组[i];
- if(typeof 选中行对象[选区行号数组[i]]=='undefined'){
- 选中行对象[选区行号数组[i]]=1;
- }else{选中行对象[选区行号数组[i]]++;}
- }
- }
- let 选中行数=Object.keys(选中行对象).length;
- if(选中行数==1){ //选中了单行
- let 选中行号=选区行号;
- //确定首尾列号
- let 选区格串=选区地址.replace(/:/g,',');
- let 选区格组=选区格串.split(',');
- let 选定最小列号=100,选定最大列号=0;
- for(let i=0;i<选区格组.length;i++){
- let 格列号=表.Range(选区格组[i]).Column; //获取单元格的列号
- if(格列号<选定最小列号){选定最小列号=格列号;}
- if(格列号>选定最大列号){选定最大列号=格列号;}
- }
- if(选定最小列号>=简表首列号 && 选定最大列号<=简表尾列号){
- let 简表头区=表.Range(表.Cells(1,简表首列号),表.Cells(1,简表尾列号));
- let 序号列=简表头区.Find('序号').Column;
- let 任务名称列=简表头区.Find('任务名称').Column;
- let 开始时间列=简表头区.Find('开始时间').Column;
- let 结束时间列=简表头区.Find('结束时间').Column;
- let 统计类型列=简表头区.Find('统计类型').Column;
- let 统计目标列=简表头区.Find('统计目标').Column;
- let 编码列=简表头区.Find('编码').Column; //简表数据
-
- let 总行数=表.UsedRange.Rows.Count;
- let 分配表头区=表.Range(表.Cells(1,1),表.Cells(1,简表首列号-1));
- let 任务量列=分配表头区.Find('任务量').Column;
- let 任务量列区=表.Range(表.Cells(2,任务量列),表.Cells(总行数,任务量列)); //门店目标分配
- let 人员数列=分配表头区.Find('人员数').Column;
- let 门店目标格=表.Cells(1,任务量列+1);let 门店目标列=门店目标格.Column;
- let 人均目标格=表.Cells(1,任务量列+2);
- let 门店目标列区=表.Range(门店目标格.Offset(1,0),表.Cells(总行数,门店目标列)); //门店目标分配
- let 目标描述区=表.Columns(人员数列-1); //竖分区:目标内容描述
- let 任务名格=目标描述区.Find('任务名');
- let 时间格=目标描述区.Find('时间');
- let 编码格=目标描述区.Find('编码'); //目标表数据
-
- let 选中所在行头格=表.Cells(选中行号,简表首列号);
- let 选行头格内容=表.Cells(选中行号,简表首列号).Value2;
- if(选行头格内容!='' && typeof 选行头格内容!='undefined'){
- //一、读取简表行内容
- let 任务名称=表.Cells(选中行号,任务名称列).Value2;
- let 开始时间=表.Cells(选中行号,开始时间列).Value2;
- let 结束时间=表.Cells(选中行号,结束时间列).Value2;
- let 目标类型=表.Cells(选中行号,统计类型列).Value2;
- let 统计目标=表.Cells(选中行号,统计目标列).Value2;
- let 编码=表.Cells(选中行号,编码列).Value2;
-
- //二、填写目标分配表
- if(目标类型=='销售金额'){
- 人均目标格.Value2='金额';人均目标格.Font.Color=0xFF; //红色
- 任务名格.Font.Color=0xFF;时间格.Font.Color=0xFF;编码格.Font.Color=0xFF;
- }else{if(目标类型=='销售数量'){
- 人均目标格.Value2='数量';人均目标格.Font.Color=0xFF0000; //蓝色
- 任务名格.Font.Color=0xFF0000;时间格.Font.Color=0xFF0000;编码格.Font.Color=0xFF0000;
- }}
- 人均目标格.Offset(1,0).Value2=统计目标; //金额值/数量值,即人均目标量
- 任务名格.Offset(1,0).Value2=任务名称; //任务名称
- 时间格.Offset(1,0).Value2=开始时间;时间格.Offset(2,0).Value2=结束时间; //开始结束日期
- 编码格.Offset(1,0).Value2=编码; //药品编码
- let 门店目标分配量组=门店目标列区.Value2;
- 任务量列区.Value2=门店目标分配量组; //任务量值:整列赋值
- 目标簿.Save(); //保存目标表
-
- //三、打开编码表,并填写保存 扩展编码表文件名
- let 扩展表已打开=0,扩展簿=null;
- for(let 工作簿 of Workbooks){
- if(工作簿.Path+'\\'+工作簿.Name==扩展编码表文件名){
- 扩展簿=工作簿;扩展表已打开=1;break;
- }
- }
- if(!扩展表已打开){扩展簿=Workbooks.Open(扩展编码表文件名);}
- let 扩展表=扩展簿.Worksheets(1); //取扩展工作表
- 表.Activate(); //切换显示原任务表
- let 编码数组=编码.split(',');
- let 扩展表头区=扩展表.Range("1:1");
- let 扩展表编码列=扩展表头区.Find('商品编码').Column;
- let 扩展表品名列=扩展表头区.Find('商品名称').Column;
- 扩展表.Cells(2,扩展表品名列).Value2=任务名称; //任务名当品名
- let 扩展表总行数=扩展表.UsedRange.Rows.Count; //清空扩展表原编码
- 扩展表.Range(扩展表.Cells(2,扩展表编码列),扩展表.Cells(扩展表总行数,扩展表编码列)).ClearContents();
- for(let i=0;i<编码数组.length;i++){ //扩展表填入商品编码
- 扩展表.Cells(i+2,扩展表编码列).Value2=编码数组[i];
- }
- 扩展簿.Save(); //保存扩展表
- }else{alert("选中行为空 或 不完整!");}
- }else{alert("选区不在表范围,或有超出部分!");}
- }else{alert("选中了 整列 或 多行!");}
- }else{alert("表名不包含“随心看”!");}
- }else{alert("文件名不包含“随心看”!");}
- }
复制代码
有简单的选中区位置判断 和 根据行头定位列号。 |
|