javascript
微信小程序复制就好-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.copyStrlet outstr='序號;房號;產品;數量;單價;金額'let colData=[]let value=''let vline=0;let louno='';let lno='';let n1=0let 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的分列功能用一下。?
?
如果沒有問題,把不要行都刪除
| 序號 | 房號 | 產品 | 數量 | 單價 | 金額 |
| 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 |
總結
以上是生活随笔為你收集整理的微信小程序复制就好-JS工具eval5,用JS替换VBA处理Excel数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react textarea 空格为什么
- 下一篇: 用了十年的昵称badboy_怎样用5秒钟