用 excel 處理資料時,有時需要對字串進行拆分。對於比較簡單的拆分,使用 excel 函式可以順利完成,但碰到一些特殊需求,或者拆分的規則比較複雜時,則很難用 excel 實現了。這裡列出一些拆分需求示例,分析拆分難點,並提供 spl 解決**。spl 是專業計算引擎 esproc 使用的語言,用於處理結構化資料運算非常方便,對於字串拆分的運算也很簡單。
這裡有乙份車間採購產品清單,清單的每一項包含了需要採購的品牌以及產品型號。現在想要把每一項的品牌以及型號拆分後單獨列到後面。
檔案 productlist.xlsx 中資料如下:
期望結果:
使用 excel 來處理這類拆分時,可以使用資料的分列,但是分列有個缺點,其實也算不上缺點,只是針對這個只想拆出品牌的需求來說單詞被過渡拆分了。比如後面的型號,也會被拆分到多個列,又需要重新合併,過程有點得不償失。不過 excel 還有乙個快速填充,可以根據給定的參考值,比如第一行給定 panasonic,便可使用類似規則快速填充後面行的拆分,然後再用 mid 函式間接算出型號的字串部分,過程依然繁瑣。
使用 spl 可以直接讀取 excel 檔案,對於實時分析操作,也可以將 excel 中的資料複製到剪貼簿,然後在 spl 裡面使用 clipboard 函式直接從剪貼簿獲取資料,資料整理完後,再將結果放入剪貼簿,然後在 excel 中貼上結果,這樣便可將 excel 的分析操作跟 spl 的計算無縫對接起來,方便而又高效。
spl 拆分**:ab
1=clipboard().import@i()
/從剪貼簿匯入產品清單
2=a1.(~.split@1(" "))
/從第乙個空格處將產品清單分離為兩部分,產生乙個序列的序列
3=a2.concat@n("\t")
/拼接為子串行的成員用 tab 分隔,序列的成員之間用回車分隔的二維表串
4=clipboard(a3)
/將串值放置到剪貼簿
**執行完成後,只需在b1 格貼上便可得到期望結果。
如下為一些數字跟字元混合在一起的資料,現在需要將數字和字元分離開。
檔案 numbers.xlsx 中資料如下:
期望結果:
如果是光分離數字出來,仍然可以使用給定首行參考值,然後採用快速填充,便可以將所有數字分離出來。但是要將剩餘的字元再分離出來,excel 沒有合適的辦法,因為有些數字是跟字元交叉混合在一起,沒法用 mid 等函式拆分。只能採用 vba 寫**逐字迴圈,判斷字元型別,挨個分離,過程依然麻煩。
spl 可以直接將串分離成單字元,並根據型別劃分:ab
1=clipboard().split@n()
/將剪貼簿資料按回車拆分為成員,然後將成員再逐字拆分
2=a1.(~.align@a([true,false],isdigit(~)).(~.concat()))
/每一項字串行用是否為數字分成兩組,繼而再拼成串,從而分離出數字和字元
3=a2.concat@n("\t")
/將兩層序列分別用 tab 和回車拼為二維表式的大串
4=clipboard(a3)
/將大串放置到剪貼簿
下面為一些包含日期的句子或段落,現在想要把句子裡面所有的日期分離出來,一行中包含多個日期時,用分號分開。
檔案 multidates.xlsx 中資料如下:
期望結果:
要將句子裡面的日期分離出來,excel 沒有相應的辦法,尤其像這種乙個句子裡面有不定個數的日期。如果是固定位置或長度的日期格式,才可能用擷取固定長度,或者使用快速填充能夠辦到。對於上述多個日期的分離,只能寫 vba **,再用正規表示式去匹配解析,完成這種需求對人員要求較高,且實現過程繁瑣。
spl 直接用空格分割串為單詞序列,然後按格式轉換日期型別的資料:ab
1=clipboard().split@n(「 「)
/將剪貼簿資料按回車拆分成員,然後用空格將每一成員拆分為單詞序列
2=a1.(~. (date(~,"dd.mm.yy")))
/將單詞序列的成員按照指定格式轉換為日期型別的資料
3=a2.(~.select(ifdate(~)))
/選出序列中的日期型別的值
4=clipboard(a3.concat@n(「;」))
/將日期串串行結果拼接為二維表串並放置到剪貼簿
執行完上述**後,直接在源表中的b1 格執行貼上,即可得到期望結果。
如下表為一列長度不等的數字,現在需要將數字逐字拆分成為單獨的列。
檔案 number.xlsx 的資料:
期望結果:
使用 excel 拆分上述數字時,首先想到的是使用分列,但是像這種逐字拆分,分列時只能乙個乙個指定分隔位,數字比較長時就要多次重複設定,操作多而麻煩。其次是使用函式,比如可以在 b1 寫入 =mid($a1,column(a1),1),然後拖拽滑鼠進行行填充以及列填充,但這種操作不好掌握最大列數,篇幅大時,操作也不方便。
spl 可以直接按字元拆分:ab
1=clipboard().split@n()
/將剪貼簿資料按回車拆分成員,然後每個成員再預設拆分為單字串行
2=a1.concat@n("\t")
/將拆分後的兩層序列拼成串式二維表
3=clipboard(a2)
/將結果放置到剪貼簿
上述**執行完成後,同樣在 b1 處貼上拆分後的資料即可。
如下資料為一段日誌描述檔案,結構相對複雜,其中包含類似於屬性表的分節描述。現在想將屬性描述中的 publickeytoken 以及檔名分離出來。
檔案 log.xlsx 的資料:
期望結果:
這是乙個綜合串的分離,第一層為用逗號分隔的描述串,然後第二項類似於屬性分節串的描述。所以使用 excel 時,需要多次分列,以及多次快速填充,方可完成期望結果。同樣是步驟多,且需要給定參考值來快速填充,過程繁瑣。
spl 提供了函式直接對屬性串取值,以及對檔名的不同部分拆分:ab
1=clipboard().split@nc()
/將剪貼簿資料用回車拆分成員,然後以逗號拆分子成員序列
2=a1.([replace(~(2),"\"","").property("publickeytoken"),filename(replace(~(3),"\"",""))])
/去掉兩端引號後,用屬性 property 函式從第 2 項獲取 publickeytoken 的值;再用 filename 函式拆分出第 3 項中的檔名;再將這兩個值構成序列
3=clipboard(a2.concat@n("\t"))
/將結果拼為大串放置到剪貼簿
《spl cookbook》中有更多相關計算示例。
Excel 字串拆分
用 excel 處理資料時,有時需要對字串進行拆分。對於比較簡單的拆分,使用 excel 函式可以順利完成,但碰到一些特殊需求,或者拆分的規則比較複雜時,則很難用 excel 實現了。這裡列出一些拆分需求示例,分析拆分難點,並提供 spl 解決 spl 是專業計算引擎 esproc 使用的語言,用於...
excel 字串拆分
我有一串資料是這樣的,如下 0000878702,0015579954,0015581832,0015582792,0015584265,0015661886,0015675467,0015678478,0020750954,0020848847,0022192574,0022677469,0022...
根據標點拆分字串 Excel 字串拆分
用 excel 處理資料時,有時需要對字串進行拆分。對於比較簡單的拆分,使用 excel 函式可以順利完成,但碰到一些特殊需求,或者拆分的規則比較複雜時,則很難用 excel 實現了。這裡列出一些拆分需求示例,分析拆分難點,並提供 spl 解決 spl 是專業計算引擎 esproc 使用的語言,用於...