經過上篇的簡單示例,給大家領略了PowerShell的威力,做同樣的事情,比起其他語言來,更容易實現,幾乎就是需要做什麼就一個命令完成。
但通常一些複雜的操作,在原生的功能上沒提供,此時就需要到社區裡找現成的輪子來用,本篇給大家送上幾個新發現的不錯的輪子,讓我們的工作更加輕鬆,自在。
聽多了python的好,經PowerShell一比就不算什麼
相信在數據圈子裡,或多或少都聽到過python的一些宣傳,同一個功能C寫100行代碼,python10行代碼搞定。
這次好了,在PowerShell裡,只需1行代碼就完事,誰優誰劣,有對比就有結果。在PowerShell的輪子世界裡,也是同樣地追求這種1行代碼解決問題的快感。
PowerShell輪子在哪裡?
和dotNET的輪子庫nuget一樣,PowerShell一樣有一個官方的輪子庫powershellgallery。火熱程度不及nuget,但其實從廣義來說,nuget的輪子,都可以用到PowerShell上來,因為都是同樣的dotNET庫,PowerShell支持使用dotNET類庫,只是有些麻煩,筆者也沒興趣太多研究,坐等powershellgallery慢慢繁榮起來即可。

如何安裝PowerShell輪子
PowerShell的輪子叫模塊,一句命令就可以安裝了。按關鍵字找到自己需要安裝的輪子,把名字記下來,就可以在PowerShell上輸入Install-Module -Name 模塊名進行安裝。

當然,如果不想用瀏覽器,直接在PowerShell上用Find-Module一樣可以查看到。不過信息量沒有網頁查看地詳細。
安裝過程中,可能有些小意外,不要慌,一般來說,用管理員權限打開PowerShell更為合理,如果自己寫腳本給自己用的話。
查看輪子有哪些的功能
作為一個搞數據的人,哪裡都離不開Excel,本篇也重點給大家介紹一個不錯的Excel輪子,其底層也是用了dotNET的EPPLUS輪子作封裝的,讓PowerShell上與Excel交互更方便,並且性能得到保證,用的是openxml方式而不是依賴OFFICE環境的COM接口方式。
查看ImportExcel輪子有哪些功能,相對去網頁上看,還不如直接在PowerShell的幫助上看,更方便,有時作者也只是維護了PowerShell裡的幫助文檔,反而在網頁上沒多少文檔信息,這就是PowerShell奇特之處,用中學,自帶幫助。
一般來說,只要我們導入過模塊之後,右邊的幫助系統裡,就可以找到模塊的幫助信息,如果沒有,就重新用Import-Module導入一下。
隨便找一句命令來試試手,Send-SQLDataToExcel,將數據庫數據導出到Excel中來,數據庫不限於Sqlserver,ACCESS、Excel也可以當數據庫訪問。
Send-SQLDataToExcel -MsSQLserver -Connection localhost -SQL "select name,type,type_desc from [master].[sys].[all_objects]" -Path F:\\自媒體相關\\其他文章分享\\powershell\\輪子\\temp.xlsx -WorkSheetname master -AutoSize -FreezeTopRow -AutoFilter -BoldTopRow
就一句命令,按照人想什麼,它就幫我們做成了什麼,只要按格式把一些要求的參數填上,參數填得越詳細,出來的結果越符合自己的期望。
如示例中展示的-AutoSize -FreezeTopRow -AutoFilter -BoldTopRow,只要會英文單詞,都可以知道里面是什麼意思了。
比起等現成工具給我們做界面,開放各種參數,不如自己會一點點小腳本,自己靈活配置來得舒服。
ImportExcel的許多寶藏等著挖掘
相對於像Excel催化劑那樣的插件實現,自己把這個Excel輪子研究一下,可能出來的結果更合自己的口味,此輪子有大量的示例文件供學習,在github上可以找到,或者不想找,後臺回覆【ImportExcel】給大家發送。
忍不住給大家再展示一條命令,Excel催化劑未有實現的文件對比功能,兩個工作表的數據差異對比,提供參照列,對比列的參數即可完成。最終結果如下:橙色是不同,綠色是新增,粉色是刪除。
按對應的參數填寫好,複製一下就完事,當然在作者的示例文檔裡直接複製更容易。
Merge-Worksheet -Referencefile "$env:temp\\server1.xlsx" -Differencefile "$env:temp\\Server2.xlsx" -OutputFile "$env:temp\\combined1.xlsx" -Property name,displayname,startType -Key name -Show
數據庫寫入數據利器Write-ObjectToSQL
除了玩Excel外,數據庫也是必玩的,所以也順便介紹一個剛發現的不錯的輪子Write-ObjectToSQL,將任何對象上傳到Sqlserver中,如我們讀入一個Excel文件,就可以把這個文件數據上傳到Sqlserver上,無需提前建表。或者在運行過程中生成的不同的對象集合,一樣可以上傳。
按實際需要填寫好參數。
Import-Excel -Path F:\\自媒體相關\\其他文章分享\\powershell\\輪子\\combined.xlsx|Write-ObjectToSQL -Database Test -Server localhost -TableName TestTable
就這麼簡單,一句命令,就可以將Excel表數據上傳到Sqlserver上。,並且代碼也是接近人的語言,用界面填寫下參數就完成了,門檻足夠低。
結語
如今任何一門語言都是有大量的現成輪子存在可供使用,PowerShell的輪子也真不少,算上其微軟自身產品Windows、Sqlserver、ExChange、OFFICE等等大量的現成cmdlets命令,再外加社區的輪子,有能力的話,還可以把dotNET社區裡的輪子也一併使用起來,是不是非常爽了呢。
簡單入門一下語法,又可以打開一扇大門,從中得到廣闊的世界,這就是輪子消費者的境界。
筆者未來聚焦在數據領域的分享,不限於Excel,會分享更多Sqlserver、dotNET、Azure、PowerBI等話題,升級數據分析的能力,歡迎繼續關注。*
閱讀更多 Excel催化劑 的文章