微信小程序有个限制,不能用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;

JavaScript with 替代 javascript代替vba_javascript

 

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

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

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

JavaScript with 替代 javascript代替vba_微信_02

WPS的分列功能用一下。 

 

JavaScript with 替代 javascript代替vba_JavaScript with 替代_03

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

序号

房号

产品

数量

单价

金额

1

904

蔬菜

1

2

1002

牛肉酱

1

2

1002

白糖

1

2

1002

鸡蛋

1

3

1004

白糖

1

3

1004

牛肉酱

1

3

1004


1

4

503

蔬菜

1

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

序号

房号

产品

数量

单价

金额

1

904

蔬菜

1

2

2

2

1002

牛肉酱

1

10

10

2

1002

白糖

1

1

1

2

1002

鸡蛋

1

4

4

3

1004

白糖

1

1

1

3

1004

牛肉酱

1

20

20

3

1004


1

1

1

4

503

蔬菜

1

2

2

 

数据透视图

求和项:数量

产品

房号

白糖

鸡蛋

牛肉酱

蔬菜

总计

503

1

1

904

1

1

1002

1

1

1

3

1004

1

1

1

3

总计

2

1

2

2

1

8

 

求和项:金额

产品

房号

白糖

鸡蛋

牛肉酱

蔬菜

总计

503

2

2

904

2

2

1002

1

4

10

15

1004

1

20

1

22

总计

2

4

30

4

1

41