xlwings的In-Excel SQL功能介紹

以前習慣用vlookup或者高級篩選來實現匹配,pandas的merge雖然好,但是總不如sql來的靈活。

excel也有power query,但是給我的感覺和本身工作表結合得不是很密切。

可能有的人會反對,但是xlwings的In-Excel SQL是做出了一個sql函數,可以說沒有什麼門檻。數據量不是很大的時候比較方便。只要不報錯,看起來就像excel原生支持sql函數一樣。

這個功能是在v0.11.0時加進去的。

按照官方的說法Migrate to v0.11 (Add-in),使用Add-in的一個辦法是在cmd中執行xlwings addin install,但是我這裡好像沒用。

那麼也可以把Libsite-packagesxlwingsaddinxlwings.xlam複製到XLSTART文件夾,

後者的位置可以在「Excel選項-信任中心-信任中心設置-受信任位置里」找到(對應「描述」列為「Excel默認位置:用戶啟動」)。

(補充一下,可能有點亂:按照官方Add-in - xlwings 0.11.4 documentation,為了使用Add-in,需要打開VBA,在工具-引用,里勾上xlwings。

但按Extensions - xlwings 0.11.4 documentation里的說法,「UDF extensions can be used from every workbook without having to set a reference.」,所以打開VBA這步不是必要的。)

sql函數的用法很簡單,第一個參數就是select語句所在的單元格,從第二個參數開始,就是表格a、b、c……往下所在的區域。select語句裡面的表格名就是a、b、c……。(本文題圖就是官方doc的截圖)。回車後結果就會在當前單元格填充成表格展開來。

用的是Python3的話,應該是支持中文的列名的,但是excel里的列名往往不是很規範,可能有空格、回車之類的,這個可能需要注意。

修改語句執行會把原來的結果給清掉,不用擔心第二次執行的結果比第一次少,第一次的結果會留在工作表上。

至於怎麼實現這個功能的呢?可以看下Libsite-packagesxlwingsext的sql.py,這裡面定義了一個UDF,看到裡面有句「conn = sqlite3.connect(:memory:)」,相信應該就能看出其中的原理了。

看上去似乎完全感覺不到在用Python,只有報錯的時候會在單元格里把Python的錯誤提示輸出來。

推薦閱讀:

TAG:xlwings | Python | Excel使用 |