找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 42|回复: 0

[转载代码] 在WPS中展开表数据

[复制链接]
发表于 昨天 16:20 | 显示全部楼层 |阅读模式
一行展开成一个表。        //JSA代码

一行在简表区,简表在工作表靠右;一个表在工作表左侧。
选中简表区某一行,点击按钮,先展开成同表的分配表 再填写另一个文件编码表,最后保存。
  1. function 随心看(){        //生成目标分配表、扩展编码表
  2.         console.clear();
  3.         let 目标簿=ActiveWorkbook;
  4.         let 表路径=目标簿.Path;
  5.         let 表文件名=目标簿.Name;
  6.         let 月目标序号=表文件名.indexOf('月目标');
  7.         if(月目标序号==-1){alert("文件名找不到“月目标”!");return;}
  8.         let 月份=表文件名.slice(0,月目标序号);
  9.         let 扩展编码表文件名=表路径+"\\"+月份+"月商品导入.xlsx"        //扩展编码表
  10.         if(!FileSystem.Exists(扩展编码表文件名)){alert("找不到 扩展编码表:\n"+扩展编码表文件名);return;}
  11.         if(表文件名.indexOf("(随心看任务)")!=-1){        //文件名包含随心看
  12.                 let 表=ActiveSheet;
  13.                 let 表名=表.Name;
  14.                 console.log(表名);
  15.                 if(表名.indexOf("随心看任务")!=-1){        //表名包含随心看
  16.                         //简表头尾列号
  17.                         let 简表首内容='序号',左侧非空和=-4170,右侧非空格=-4161;
  18.                         let 简表头首格=表.Range("1:1").Find(简表首内容);
  19.                         let 简表头尾格=简表头首格.End(右侧非空格);
  20.                         let 简表首列号=简表头首格.Column,简表尾列号=简表头尾格.Column;
  21.                        
  22.                         //单行判断与选中行号
  23.                         let 选区=Selection;
  24.                         let 选区地址=选区.Address();
  25.                         let 选区行号数串=选区地址.replace(/[^\d]+/g,',');
  26.                         let 选区行号数组=选区行号数串.split(',');
  27.                         let 选中行对象={},选区行号;
  28.                         for(let i=0;i<选区行号数组.length;i++){
  29.                                 if(+选区行号数组[i]!=0){
  30.                                         选区行号=选区行号数组[i];
  31.                                         if(typeof 选中行对象[选区行号数组[i]]=='undefined'){
  32.                                                 选中行对象[选区行号数组[i]]=1;
  33.                                         }else{选中行对象[选区行号数组[i]]++;}
  34.                                 }
  35.                         }
  36.                         let 选中行数=Object.keys(选中行对象).length;
  37.                         if(选中行数==1){        //选中了单行
  38.                                 let 选中行号=选区行号;
  39.                                 //确定首尾列号
  40.                                 let 选区格串=选区地址.replace(/:/g,',');
  41.                                 let 选区格组=选区格串.split(',');
  42.                                 let 选定最小列号=100,选定最大列号=0;
  43.                                 for(let i=0;i<选区格组.length;i++){
  44.                                         let 格列号=表.Range(选区格组[i]).Column;        //获取单元格的列号
  45.                                         if(格列号<选定最小列号){选定最小列号=格列号;}
  46.                                         if(格列号>选定最大列号){选定最大列号=格列号;}
  47.                                 }
  48.                                 if(选定最小列号>=简表首列号 && 选定最大列号<=简表尾列号){
  49.                                         let 简表头区=表.Range(表.Cells(1,简表首列号),表.Cells(1,简表尾列号));
  50.                                         let 序号列=简表头区.Find('序号').Column;
  51.                                         let 任务名称列=简表头区.Find('任务名称').Column;
  52.                                         let 开始时间列=简表头区.Find('开始时间').Column;
  53.                                         let 结束时间列=简表头区.Find('结束时间').Column;
  54.                                         let 统计类型列=简表头区.Find('统计类型').Column;
  55.                                         let 统计目标列=简表头区.Find('统计目标').Column;
  56.                                         let 编码列=简表头区.Find('编码').Column;        //简表数据
  57.                                        
  58.                                         let 总行数=表.UsedRange.Rows.Count;
  59.                                         let 分配表头区=表.Range(表.Cells(1,1),表.Cells(1,简表首列号-1));
  60.                                         let 任务量列=分配表头区.Find('任务量').Column;
  61.                                         let 任务量列区=表.Range(表.Cells(2,任务量列),表.Cells(总行数,任务量列));        //门店目标分配
  62.                                         let 人员数列=分配表头区.Find('人员数').Column;
  63.                                         let 门店目标格=表.Cells(1,任务量列+1);let 门店目标列=门店目标格.Column;
  64.                                         let 人均目标格=表.Cells(1,任务量列+2);
  65.                                         let 门店目标列区=表.Range(门店目标格.Offset(1,0),表.Cells(总行数,门店目标列));        //门店目标分配
  66.                                         let 目标描述区=表.Columns(人员数列-1);        //竖分区:目标内容描述
  67.                                         let 任务名格=目标描述区.Find('任务名');
  68.                                         let 时间格=目标描述区.Find('时间');
  69.                                         let 编码格=目标描述区.Find('编码');        //目标表数据
  70.                                        
  71.                                         let 选中所在行头格=表.Cells(选中行号,简表首列号);
  72.                                         let 选行头格内容=表.Cells(选中行号,简表首列号).Value2;
  73.                                         if(选行头格内容!='' && typeof 选行头格内容!='undefined'){
  74.                                                 //一、读取简表行内容
  75.                                                 let 任务名称=表.Cells(选中行号,任务名称列).Value2;
  76.                                                 let 开始时间=表.Cells(选中行号,开始时间列).Value2;
  77.                                                 let 结束时间=表.Cells(选中行号,结束时间列).Value2;
  78.                                                 let 目标类型=表.Cells(选中行号,统计类型列).Value2;
  79.                                                 let 统计目标=表.Cells(选中行号,统计目标列).Value2;
  80.                                                 let 编码=表.Cells(选中行号,编码列).Value2;
  81.                                                
  82.                                                 //二、填写目标分配表
  83.                                                 if(目标类型=='销售金额'){
  84.                                                         人均目标格.Value2='金额';人均目标格.Font.Color=0xFF;        //红色
  85.                                                         任务名格.Font.Color=0xFF;时间格.Font.Color=0xFF;编码格.Font.Color=0xFF;
  86.                                                 }else{if(目标类型=='销售数量'){
  87.                                                         人均目标格.Value2='数量';人均目标格.Font.Color=0xFF0000;        //蓝色
  88.                                                         任务名格.Font.Color=0xFF0000;时间格.Font.Color=0xFF0000;编码格.Font.Color=0xFF0000;
  89.                                                 }}
  90.                                                 人均目标格.Offset(1,0).Value2=统计目标;        //金额值/数量值,即人均目标量
  91.                                                 任务名格.Offset(1,0).Value2=任务名称;        //任务名称
  92.                                                 时间格.Offset(1,0).Value2=开始时间;时间格.Offset(2,0).Value2=结束时间;        //开始结束日期
  93.                                                 编码格.Offset(1,0).Value2=编码;        //药品编码
  94.                                                 let 门店目标分配量组=门店目标列区.Value2;
  95.                                                 任务量列区.Value2=门店目标分配量组;        //任务量值:整列赋值
  96.                                                 目标簿.Save();        //保存目标表
  97.                                                
  98.                                                 //三、打开编码表,并填写保存        扩展编码表文件名
  99.                                                 let 扩展表已打开=0,扩展簿=null;
  100.                                                 for(let 工作簿 of Workbooks){
  101.                                                         if(工作簿.Path+'\\'+工作簿.Name==扩展编码表文件名){
  102.                                                                 扩展簿=工作簿;扩展表已打开=1;break;
  103.                                                         }
  104.                                                 }
  105.                                                 if(!扩展表已打开){扩展簿=Workbooks.Open(扩展编码表文件名);}
  106.                                                 let 扩展表=扩展簿.Worksheets(1);        //取扩展工作表
  107.                                                 表.Activate();        //切换显示原任务表
  108.                                                 let 编码数组=编码.split(',');
  109.                                                 let 扩展表头区=扩展表.Range("1:1");
  110.                                                 let 扩展表编码列=扩展表头区.Find('商品编码').Column;
  111.                                                 let 扩展表品名列=扩展表头区.Find('商品名称').Column;
  112.                                                 扩展表.Cells(2,扩展表品名列).Value2=任务名称;        //任务名当品名
  113.                                                 let 扩展表总行数=扩展表.UsedRange.Rows.Count;        //清空扩展表原编码
  114.                                                 扩展表.Range(扩展表.Cells(2,扩展表编码列),扩展表.Cells(扩展表总行数,扩展表编码列)).ClearContents();
  115.                                                 for(let i=0;i<编码数组.length;i++){        //扩展表填入商品编码
  116.                                                         扩展表.Cells(i+2,扩展表编码列).Value2=编码数组[i];
  117.                                                 }
  118.                                                 扩展簿.Save();        //保存扩展表
  119.                                         }else{alert("选中行为空 或 不完整!");}
  120.                                 }else{alert("选区不在表范围,或有超出部分!");}
  121.                         }else{alert("选中了 整列 或 多行!");}
  122.                 }else{alert("表名不包含“随心看”!");}
  123.         }else{alert("文件名不包含“随心看”!");}
  124. }
复制代码


有简单的选中区位置判断 和 根据行头定位列号。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-6-11 02:57

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表