ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ctp_119

[原创] 跟我学JavaScript in WPS

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-29 18:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 ctp_119 于 2022-5-29 18:50 编辑

           自学规律:①如何定义的(即如何表示或表达);

                           ②赋值
                           ③加工并取值
           认识是为了更好的利用。返回去看看,是不是这样的模式,,把一些支离破碎的东西先剃掉,思路就很清晰了,自学都用这样的模式。
           下面再讲数组相关的重要知识点:
            创建:①var arr=new Array();     //创建一个空数组,var=new Array(1,2,3)
                     ②var arr=Array.of();       //创建一个空数组,   var=Array.of(4,5,6)
             数组的长度(length)属性
                       var l=arr.length;
             添加数组元素:
                        brr.push(1,2);     //在原数组的尾部添加1和2两个元素,原数组被改变
                        brr.unshift(3,4);     //在原数组的头部添加3和4两个元素,原数组被改变
                        Array.prototype.push.apply(arr,brr);     //把数组brr元素添加到数组arr的尾部
             删除数组元素:
                        arr.pop();     //从数组的尾部删除最后一个元素
                        brr.shift();     //从数组的头部删除第一个元素
             清空一个数组:
                        while(item=arr.pop()){};
                        arr.splice(0);
             合并数组:
                      var crr=arr.concat(brr);      //arr,brr原数组不变,组合后形成新的数组crr
                      var drr=[].concat(arr,brr);     //另外一种表达方式
                      var frr=[...arr,...brr];       //这种方法更简洁
              数组转字符串
                      var st=drr.toString();
                      var s=crr.join();










TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-29 19:49 | 显示全部楼层
           接着上面,继续数组方法

           字符串转数组:
                 var s="abcdefj"
                 var arr=s.split("");     //["a","b","c","d","e","f","j"]
           截取数组:slice()
                 var arr=["a","b","c"]
                 var brr=arr.slice(0);    //["a","b","c"]   
                 var brr=arr.slice();           
                 var brr=arr.slice(1);     //["b","c"]
                 var brr=arr.slice(1,2)       //["b"]
                 var brr=arr.slice(2,8)        //["c"]
          删除或替换:splice()
                 function szff(){
                       var s="abcdefj"
                       var arr=s.split("");
                       var brr=arr.splice(3,2);     //["d","e"]     这时候arr=["a","b","c","f","j"]
                       var drr=arr.splice(2,0,"x","y")      //["a","b","x","y","c","f","j"]
                }
          数组排序(reverse/sort)
                 var arr=["a","z","d","f","b"];
                 arr.resver();             //["b","f","d","z","a"]
              sort()默认按字典顺序排序,可以自定义排序
              查找元素的位置(indexOf/lastIndexOf)
                  var arr=["a","b","c"];
                  var i=arr.indexOf("b");          //i=1
                  var j=arr.indexOf("z");           //j=-1
                  var t=arr.indexOf("a",1);            //t=-1,从1号位开始找,到不到,就返回-1
            用来判断一个元素是否在一个数组中,只需判断大于0即可。
             现在一般用includes()方法来判断。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-30 07:55 | 显示全部楼层
            学到这里,突然觉悟了,JS其实没有二维数组(你是不是疯了,怎么可能没有二维数组呢?),或者说没有深刻理解一维数组。学这么多,你看过二维数组的方法或属性没有?全是一维的。

           如何理解一维数组?所有的数组都是一维数组,数组元素可以是一维数组或对象等,数组元素为一维数组的数组为二维数组。理解了这个就好办了,,,下面是我走过的弯路,当时还沾沾自喜,昨天夜里彻底打通了,为自己当时的想法感觉幼稚和无知!
  1. function 筛选(arr,i,str){      //arr为要筛选的数组,i为数组的列值,注意数组是从0开始的;str为i列中满足条件的值。
  2.                 var brr=[];
  3.                 for (var ar of arr){
  4.                         if (ar[i]==str){
  5.                                 brr.push(ar)
  6.                         }
  7.                 }
  8.                 return brr;
  9.         }
复制代码
这是自定义函数
  1. function sxsz(){//深刻理解二维函数,可以这么说,二维函数也是 一维函数,通过这个筛选,我上面的筛选函数是多余的。这个是自带的
  2.         arr=Worksheets("原始数据").Range("A1").CurrentRegion.Value2;
  3.         var brr=arr.filter(function(elem){
  4.                 return(elem[7]==Range("D1").Value2)
  5.         });
  6.         //debugger;
  7.         Range("A3").Resize(brr.length,8).Value2=brr;
  8.         var i=Range("a2").End(xlDown).Row
  9.         Range("a2").End(xlDown).Offset(1,0).Value2="合计";
  10.         Range("a2").End(xlDown).Offset(0,4).Formula="=sum(e2:e"+i+")";
  11.         Range("a2").End(xlDown).Offset(0,6).Formula="=sum(g2:g"+i+")";
  12. }
复制代码
这是自动的数组筛选方法,想想就好笑!!!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-5-30 13:42 | 显示全部楼层
有没有办法能用js打开指定文件夹里的pdf或者word文件?我现在用vba编的命令可以实现,如果换成国产电脑,就不能用vba了。

TA的精华主题

TA的得分主题

发表于 2022-5-31 00:06 | 显示全部楼层
刚好二维码过期5分钟,可以重新发一下吗?

点评

请及时关注本帖的更新!!!  发表于 2022-5-31 19:13

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-31 19:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 ctp_119 于 2022-5-31 19:55 编辑

           下面将通过实例把这些知识点联合起来用,来加强对这些知识点的掌握。



                                 微信截图_20220531192104.png


         //数组去重,自创新意方法,用splice删除重复值,标签的用法,break的用法
   function unq(arr){
                   for (var i=0;i<arr.length;i++){
                           var s=arr;
                           B:if (arr.indexOf(s,i+1)>0){
                                   arr.splice(arr.indexOf(s,i+1),1);
                                   break B;
                           }
                   }
   }
   function test2(){
           var b=[5,5,4,6,8,6,9,9];
           unq(b);
           //debugger
           Range("M1").Resize(1,b.length).Value2=b;
   }
   
   //单元格横竖转换为数组
function qzsz(rng){
        var arr=rng.Value2;       //单元格区域引用,不管是横向还是纵向引用,都是二维数组,
        var brr=[];
        if (arr.length>1){      //如果数组大于1,说明是纵向引用单元格区域,否则是横向。
                return brr=WorksheetFunction.Transpose(rng);      //纵向引用的单元格区域转化为一维数组用转置函数
        }
        else {
                return brr=arr[0];      //横向引用的取数组一维赋值即可
        }
}


function test1(){     //纵向去重测试
        var arr=qzsz(Range("A2:A"+Range("a65536").End(xlUp).Row));
        unq(arr);
        Range("B2").Resize(arr.length,1).Value2=WorksheetFunction.Transpose(arr);
}


function test3(){    //横向去重测试
        var arr=qzsz(Range("I1",Range("I1").End(xlToRight)));
        unq(arr);
        Range("G2").Resize(arr.length,1).Value2=WorksheetFunction.Transpose(arr);
}


function unq2(arr){
        var brr=[];
        for (ar of arr){
                if (brr.indexOf(ar)==-1){    //如果brr数组中没有该元素
                        brr.push(ar);           //那么就把ar这个元素加到数组brr中,从而得到brr去重后的数组
                }
        }
        return brr;
}


function test4(){
        var arr=qzsz(Range("A2:A"+Range("a65536").End(xlUp).Row));
        var brr=unq2(arr);
        Range("C7").Resize(brr.length,1).Value2=WorksheetFunction.Transpose(brr);
}


//下面作为数组的方法(注意表达),前面两种是函数法,注意和方法二比较


//注意测试的表达
function test6(){
        var arr=qzsz(Range("I1",Range("I1").End(xlToRight)));
        Array.prototype.unqt=function(){
                var brr=[];
                for (var i=0;i<this.length;i++){
                        if(brr.indexOf(this)==-1){
                                brr.push(this);
                        }
                }
                return brr;
        }
        var drr=arr.unqt();
        Range("F7").Resize(drr.length,1).Value2=WorksheetFunction.Transpose(drr);
}

我在这个公众号学习了很多,想学习的也可以进去学习
https://mp.weixin.qq.com/s/nhr_vDaU4Py6oE7-pZm2hw

微信截图_20220531195208.png


TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-31 19:37 | 显示全部楼层
          我最喜欢通吃的方法了,下面是一个单元格区域的去重。

            微信截图_20220531193118.png
//单元格区域数据去重
function qc(){
        var arr=Range("A1:F11").Value2;
        var str=arr.join();     //或者:var str=arr.toString();
        var brr=str.split(",");
        //var s=new Set();
        //brr.forEach(x=>s.add(x));   //针对的是一维数组,如果不是一维数组,是达不到效果的,我开始没有对arr数组转化,达不到意想的效果。
        //var drr=s.keys();
        var drr=[...new Set(brr)];
        Range("i2:i999").ClearContents();
        Range("i2").Resize(drr.length,1).Value2=WorksheetFunction.Transpose(drr);
        Range("J2").Resize(drr.length,1).Value2=WorksheetFunction.Transpose(drr.sort());
        Range("K2").Resize(drr.length,1).Value2=WorksheetFunction.Transpose(drr.sort(function(a,b){return a-b}));
}


function qc2(arr){
        var brr=[arr[0]];
        for (i=1;i<arr.length;i++){
                if (arr.indexOf(arr)==i)brr.push(arr)
        }
        return brr;
}
function test7(){
        var arr=qzsz(Range("A2:A"+Range("a65536").End(xlUp).Row));
        var brr=qc2(arr);
        Range("D9").Resize(brr.length,1).Value2=WorksheetFunction.Transpose(brr);
}

TA的精华主题

TA的得分主题

发表于 2022-6-1 10:20 | 显示全部楼层
JS宏可以在共享WPS中运行吗

点评

试试便知!!!  发表于 2022-6-2 07:58

TA的精华主题

TA的得分主题

发表于 2022-6-1 17:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-6-2 08:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
单元格区域数据去重
image.png

评分

4

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:50 , Processed in 0.044477 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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