根據標點拆分字串 Excel 字串拆分

2021-10-14 18:15:06 字數 3944 閱讀 6184

用 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 字串拆分

用 excel 處理資料時,有時需要對字串進行拆分。對於比較簡單的拆分,使用 excel 函式可以順利完成,但碰到一些特殊需求,或者拆分的規則比較複雜時,則很難用 excel 實現了。這裡列出一些拆分需求示例,分析拆分難點,並提供 spl 解決 spl 是專業計算引擎 esproc 使用的語言,用於...

excel 字串拆分

我有一串資料是這樣的,如下 0000878702,0015579954,0015581832,0015582792,0015584265,0015661886,0015675467,0015678478,0020750954,0020848847,0022192574,0022677469,0022...