微信小程序复制就好-JS工具eval5,用JS替换VBA处理Excel数据

微信小程序有个限制,不能用eval()函数或者new function函数。就是动态执行代码不行。网上搜了一下有个eval5,作为替换

具体查看:

eval5: 基于 TypeScript 编写的 JavaScript 解释器,支持完整 ES5 语法

小程序eval/Function终极替代方案:eval5 | 微信开放社区--这里有小程序版本和案例

--本人基于eval5,写了个复制就是结果的工具。(微信小程序名字,复制就好)

需求:Excel处理数据有缺陷,特别是公示不够多,字符串切分比较麻烦。比如一个 123abc甲乙123de;这样一个包含数字和字符的,中文的,要提取数字,提取字母,相对而言比较累。

解决方案:用JS公式来解决。

可编程的js轻量解决工具就来了,借鉴小程序的复制功能(输入),粘贴功能(输出)就可以方便获取输入数据(复制),处理数据后,输出(粘贴)。

对于普通用户来说,就是复制粘贴等于完成。对于会编程的,还可以修改公式,自己写公式来解决个性化的需求。

下面已经编辑了以下公式:去除字母,去除数字,保留字母,保留数字等公式,后续个性化的需求可以直接处理。比如每次都要替换的,那么写个替换数组,每次都要删除的,写个删除数组。

总结以下 数据处理的基本步骤

1、删除,把不要的信息删除掉

2、替换,把数据标准化,比如有人输入i,其实想输入1,有人输入一,其实就是1;

3、分割处理,字符可以一个一个的处理,判断;

下面是一个案例,用于处理微信接龙的数据,有个高手用excel写了个插件;

开发一个社区团购微信接龙报表自动生成的Excel插件 - yycoding

我认为可以用一些更加轻量的工具处理,当然本身来说用群报数、接龙助手等这种小程序能更好的收集统计信息。

我这里用这个做案例的意思就是,给你一堆有规律但是也有错误的数据,如何能够快速整理并把它结构化;然后导入到excel里边做二次加工,excel的数据透视图还是不错的,展现加打印,自己写一个看起来难度很大。

代码如下:是js写的,可以在小程序中用,let app=this


    var result =['ok']
    let copyStr=app.data.copyStr
      let outstr='序号;房号;产品;数量;单价;金额'
      let colData=[]
      let value=''
      let vline=0;
      let louno='';
      let lno='';
      let n1=0
      let str1='';
      let num1='';
      let del=['1号','1-','份','包','*',',','1一','盒','袋',',','。',';']
      let rp1=['i','I','l','一','二']
      let rp2=['1','1','1','1','2']
      let rowData0=copyStr.split("\r\n")
      for(let i=0;i<del.length;i++)
      {
        copyStr=replaceall(copyStr,del[i],'')
      }
      for(let i=0;i<rp1.length;i++)
      {
        copyStr=replaceall(copyStr,rp1[i],rp2[i])
      }
      let rowData=copyStr.split("\r\n")
      if(rowData[rowData.length-1]==""){rowData.pop()}
      console.log(rowData)
      for(let i=0;i<rowData.length;i++)
   {
    outstr=outstr+'\r\n'+'\r\n'+rowData0[i]
      value=rowData[i]
      n1=value.indexOf('.');
      vline=value.slice(0,n1);//序号
      value=value.slice(n1+1);
      console.log(value)
      let del2=['先生','女士','小姐']//去掉x先生等,3个字符
      for(let m=0;m<del2.length;m++)
      {
      if(value.indexOf(del2[m])!==-1)
      {n1=value.indexOf(del2[m])
      if(n1-1>0||!isNum(value.charAt(n1-1)))
      {
        value=replaceall(value,value.charAt(n1-1)+del2[m],'')
      }
      }
      }
      for(let j=0;j<value.length;j++)
      {//获取房间号
        lno='';
        if(!isNum(value.charAt(j)))
        { 
        if(louno!==''){
          value=value.slice(j);     
          lno=louno;
          console.log(value+'aaa'+lno)
          louno='';
          break;}
        }
        else
        {
        louno=louno+''+value.charAt(j);
        }
      }
      for(let j=0;j<value.length;j++)
      {
        if(!isNum(value.charAt(j)))
        { 
        if(num1!==''){outstr=outstr+'\r\n'+vline+';'+lno+';'+str1.trim()+';'+num1; str1='';}
        str1=str1+value.charAt(j);
        num1='';
        }
        else
        {
        num1=num1+''+value.charAt(j);
        }
      //  console.log(str1+'aa'+num1)
      if(j==value.length-1){outstr=outstr+'\r\n'+vline+';'+lno+';'+str1.trim()+';'+num1;num1='';str1='';}
      }
      
     }
     console.log(outstr)
     app.data.outStr=outstr;
  function replaceall(str, substr, newstr) {
      var p = -1;
      var s = 0; 
        while((p = str.indexOf(substr, s)) > -1) {
        s = p + newstr.length;
        str = str.replace(substr, newstr);
      }
        return str;
    };
    function  isNum(val){
    var regPos = /^[0-9]+.?[0-9]*/; 
      if(regPos.test(val)){
          return true;
      }else{
          return false;
      } 
  };
   var idx = 1;
   var timer = setInterval(function(){
   app.setData({
    result: result.join(','),
    idx: idx++
    });
  if(idx > 10) {
    clearInterval(timer);
    idx = 1;
    app.setData({
      isRunning: false
    });
  }
}, 200);
result;

 

复制详细信息里边的数据,点运行,粘贴到excel就是如下的数据

数据结构是 标题行+空格行+原数据行+有结构数据行(可能多行)+空格行 

因为最终还是要核对一下数据,毕竟是不规则的数据,程序可能处理不完整

WPS的分列功能用一下。 

 

如果没有问题,把不要行都删除

序号房号产品数量单价金额
1904蔬菜1
21002牛肉酱1
21002白糖1
21002鸡蛋1
31004白糖1
31004牛肉酱1
310041
4503蔬菜1

 然后用vlookup获取一下单价,金额=单价*数量

序号房号产品数量单价金额
1904蔬菜122
21002牛肉酱11010
21002白糖111
21002鸡蛋144
31004白糖111
31004牛肉酱12020
31004111
4503蔬菜122

 

数据透视图

求和项:数量产品
房号白糖鸡蛋牛肉酱蔬菜总计
50311
90411
10021113
10041113
总计212218

 

求和项:金额产品
房号白糖鸡蛋牛肉酱蔬菜总计
50322
90422
1002141015
1004120122
总计24304141
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值