亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PowerShell > 正文

PowerShell操作Excel、CSV詳細介紹

2020-03-26 19:12:18
字體:
來源:轉載
供稿:網友

Powershell針對Excel的一些簡單操作

 

  稍微高級點的語言都會涉及到對COM對象的操作,作為微軟自己進化的腳本語言,powershell有這個功能一點不稀奇,首先它使用 .NET Framework 提供的強大類庫,很多特性和C#相似;其次,雖然作為腳本但它面向對象。使用powershell來管理WMI和COM更簡單。

  用微軟官方的話概括powershell就是:

  Windows PowerShell™ 是一種基于任務的命令行 shell 和腳本語言,專門用于管理系統。 Windows PowerShell™ 構建于 .NET Framework 之上,能夠幫助 IT 專業人員和高級用戶控制和自動管理 Windows 操作系統以及在 Windows 上運行的應用程序。

   內置 Windows PowerShell 命令(稱為 cmdlet)可用于通過命令行管理企業中的計算機。使用 Windows PowerShell™ Provider,您可以像訪問文件系統那樣輕松地訪問數據存儲,如注冊表和證書存儲。 此外,Windows PowerShell™ 還具有一個功能豐富的表達式分析程序和一種經過充分開發的腳本語言。

  下面介紹powershell對excel的簡單操作。

  首先,我執行一條命令來獲取系統當前正在運行的所有進程:

PowerShell,Excel,CSV

Get-Process cmdlet顯示當前本地進程運行狀態,包括處于打開狀態的句柄數量、各種內存占用視圖以及 CPU 使用率的快照。powershell和Linux shell一個很大的不同點就是大小寫不敏感,無論是系統函數還是命令。這點可以減少犯錯的概率。

  您可能疑惑為什么講這個?對于系統管理員來說,冗長的數據背后隱藏著大量細節,get-process是獲取本地進程運行情況,當然加上-computername參數后可以訪問遠程計算機,但目前這個對于網絡管理員來說猶如海市蜃樓,所以不得不使用windows WMI和 Win32_Process WMI 類來監視遠程系統并以實用方式顯示信息。如果認為 Get-Process 的輸出內容非常豐富,請再仔細看看 Win32_Process 的輸出:

PowerShell,Excel,CSV

 很明顯,這個輸出很詳細,但是可讀性不強,管理員需要的是易于閱讀的內存占用量報告??梢赞D用Excel實現自動操作。

 自動化 Excel 有多難?實際上非常簡單,因為 Microsoft 已創建了專門用于處理 Excel 的自動化模型。程序 ID 是 Excel.Application,它是一個 COM 對象。創建 Excel.Application 對象的實例時,Excel 會默認啟動并運行,只是您看不見它。但是,可使用 visible 屬性讓 Excel 顯示出來。

以下代碼顯示了如何創建 Excel.Application 對象、查詢 visible 屬性的狀態,然后將 visible 屬性設為 true:

復制代碼 代碼如下:

PS > $excel = New-Object -ComObject Excel.Application   ==>創建一個excel應用的COM對象
PS > $excel.Visible    ==>默認新建的excel視圖不顯示,即沒有打開
False
PS > $excel.Visible = $true    ==>看到下面的界面

 

  然后,您會看到一個非常奇怪的 Excel 視圖,它看起來就像 Excel 應用程序的一個外殼(如下圖)。沒有工作簿、沒有電子表格,—個是光禿禿的 Excel。

PowerShell,Excel,CSV

當然,這個肯定是無法使用的,但是它是建立工作簿的前提,它是存放工作簿的容器?,F在我們需要將一個工作簿添加到應用程序中。為此,需要借助工作簿對象的 add 方法。工作簿對象是從主 Excel.Application 對象進行訪問的,正如您看到的,我們將工作簿對象存儲在一個名為 $workbook 的變量中:

復制代碼 代碼如下:

$workbook = $excel.Workbooks.add()   ==>現在添加了一個空的工作簿

 

現在,需連接特定的電子表格。默認情況下,工作簿添加到 Excel 時,會向其中添加三個電子表格(sheet1,sheet2,sheeet3)。這些電子表格可通過數字進行標識。在以下代碼行中,連接第一個電子表格并將返回的電子表格對象存儲在名為 $sheet 的變量中:

復制代碼 代碼如下:

$sheet = $workbook.worksheets.Item(1)   ==>表示我使用的是第一個sheet

 

現在我再運行一次$excel.Visible = $true來查看excel變成什么樣了(建好了工作簿并且選擇了sheet1):

PowerShell,Excel,CSV

現在,可將數據寫入該電子表格。Excel 電子表格中的信息存儲在單元格中。由于單元格位于電子表格之中,所以可使用 $sheet 變量中存儲的電子表格對象訪問特定的單元格。具體方法是使用指代電子表格中行和列的數字。在 Excel 電子表格中,行是數字而列是字母,這一點有些讓人迷惑。但使用自動化模型時,行和列均為數字。第一個數字是行,第二個數字是列。只需對特定單元格進行賦值即可寫入單元格:

 

復制代碼 代碼如下:

$sheet.cells.item(1,1) = "Test"   ==>我在第一個單元格填入“Test”

 

這時,您再運行$excel.Visible = $true,查看excel變成啥樣了:

PowerShell,Excel,CSV

嗯,意料之中,Excel 的一個不足是工作簿始終會創建三個電子表格,這有點浪費,因為我現在這個測試只需要第一個sheet。幸運的是,可利用自動化刪除多余的電子表格:使用工作表集合連接第三個電子表格并調用 delete 方法。執行相同的操作刪除第二個電子表格: 

復制代碼 代碼如下:

$workbook.workSheets.item(3).delete()
$workbook.WorkSheets.item(2).delete()

   這樣只剩下sheet1了,接下來,重命名剩余的電子表格。這一點非常重要,因為如果決定使用 ActiveX 數據對象 (ADO) 來查詢 Excel 電子表格,將在連接字符串中使用此電子表格名稱。因此,要使代碼易讀且直觀,電子表格應具有邏輯名稱。要重命名電子表格,只需向特定電子表格的 name 屬性賦一個值即可。以下代碼將第一個電子表格重命名為 "Processes": 
復制代碼 代碼如下:

$workbook.WorkSheets.item(1).Name = "Processes"

  現在,需連接重命名后的電子表格。使用工作表對象的 Item 方法并將電子表格的名稱指定給它: 
復制代碼 代碼如下:

$sheet = $workbook.WorkSheets.Item("Processes")

   這時我們再查看excel的樣子:

 

PowerShell,Excel,CSV

以上測試過程的代碼如下:

 

復制代碼 代碼如下:

$excel = New-Object -ComObject Excel.Application
#$excel.Visible = $true
$workbook = $excel.Workbooks.add()
$sheet = $workbook.worksheets.Item(1)
$sheet.cells.item(1,1) = "Test"
$workbook.workSheets.item(3).delete()
$workbook.WorkSheets.item(2).delete()
$workbook.WorkSheets.item(1).Name = "Processes"
$excel.Visible = $true

 

下面我們開始將process中的內容移植到excel中。
 
  電子表格的第一行將包含標頭信息。將繪制邊框并使屬性名稱顯示為粗體。由于數據將從第二行開始,因此將值 2 賦給計數器變量 $x:

復制代碼 代碼如下:

$x=2

   接下來的四行代碼創建四個枚舉類型。枚舉類型用于告訴 Excel 允許將哪些值填入特定的選項類型。例如,xlLineStyle 枚舉用于確定所繪制線條的類型:雙線條、虛線等。MSDN 上詳細介紹了這些枚舉值。
為使代碼更易于閱讀,針對將使用的每個枚舉類型創建一個快捷別名。實際上,我們將把代表枚舉名稱的字符串轉換成 [type]。 
復制代碼 代碼如下:

$lineStyle = "microsoft.office.interop.excel.xlLineStyle" -as [type]
$colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type]
$borderWeight = "microsoft.office.interop.excel.xlBorderWeight" -as [type]
$chartType = "microsoft.office.interop.excel.xlChartType" -as [type]

  現在需格式化第一行。使字體為粗體,將線條定義為 xlDashDot,允許自動指定顏色,并將邊框寬度設為中等粗細:
復制代碼 代碼如下:

for($b = 1 ; $b -le 2 ; $b++)
{
 $sheet.cells.item(1,$b).font.bold = $true
 $sheet.cells.item(1,$b).borders.LineStyle = $lineStyle::xlDashDot
 $sheet.cells.item(1,$b).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic
 $sheet.cells.item(1,$b).borders.weight = $borderWeight::xlMedium
}

 

完成后,通過使用 item 方法選擇單元格并指定行和列的坐標,向第一行賦值。接下來,使用直接賦值寫入列標題:

復制代碼 代碼如下:

$sheet.cells.item(1,1) = "Name of Process"
$sheet.cells.item(1,2) = "Working Set Size"

  現在,需將 WMI 查詢產生的 $processes 變量中存儲的進程信息放入適當的單元格中。使用 foreach 語句遍歷進程信息集合。將變量 $process 定義為集合枚舉器(占位符),并選擇將名稱和 workingSetSize 屬性分別寫入第一列和第二列。$x 變量將在此發揮作用。從第二行開始,在遍歷進程集合的同時,遞增 $x 變量的值以便它始終指向集合中的當前行。通過以下代碼,即可對 $processes 進程信息集合中存儲的所有數據進行整理分類: 
復制代碼 代碼如下:

foreach($process in $processes)
{
 $sheet.cells.item($x, 1) = $process.name
 $sheet.cells.item($x,2) = $process.workingSetSize
 $x++
}

  填寫完 Excel 電子表格后,可以調整列的大小以使單元格與其中所存儲數據的尺寸相同。為此,可通過指定要使用的列坐標來創建一個范圍;但是,也可以只使用電子表格的 usedRange 屬性。創建完范圍對象后,選擇 EntireColumn 屬性并使用 AutoFit 方法調整列的大小。由于該方法始終會返回數據,我將結果傳送給 Out-Null cmdlet。從而避免控制臺上布滿了雜亂無用的信息。下面是所用的代碼:
復制代碼 代碼如下:

$range = $sheet.usedRange
$range.EntireColumn.AutoFit() | out-null

  至此,已完成所有任務此時的電子表格具有所有進程的名稱和內存工作集,相當不錯。來看看完成后的成果:

 

PowerShell,Excel,CSV以上結果是我電腦里正在運行的進程。我只選擇了兩個字段顯示。

關于整個腳本的代碼,如下:

復制代碼 代碼如下:

$processes=Get-Process
$excel = New-Object -ComObject Excel.Application
#$excel.Visible = $true
$workbook = $excel.Workbooks.add()
$sheet = $workbook.worksheets.Item(1)
$workbook.Worksheets.item(3).delete()
$workbook.Worksheets.item(2).delete()

 

$workbook.Worksheets.item(1).name="Processes"
$sheet = $workbook.WorkSheets.Item("Processes")
$x = 2

$lineStyle = "microsoft.office.interop.excel.xlLineStyle" -as [type]
$colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type]
$borderWeight = "microsoft.office.interop.excel.xlBorderWeight" -as [type]
$chartType = "microsoft.office.interop.excel.xlChartType" -as [type]

for($b = 1 ; $b -le 2 ; $b++)
{
 $sheet.cells.item(1,$b).font.bold = $true
 $sheet.cells.item(1,$b).borders.LineStyle = $lineStyle::xlDashDot
 $sheet.cells.item(1,$b).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic
 $sheet.cells.item(1,$b).borders.weight = $borderWeight::xlMedium
}

$sheet.cells.item(1,1) = "Name of Process"
$sheet.cells.item(1,2) = "Working Set Size"

foreach($process in $processes)
{
 $sheet.cells.item($x, 1) = $process.name
 $sheet.cells.item($x,2) = $process.workingSet
 $x++
} #end foreach

$range = $sheet.usedRange
$range.EntireColumn.AutoFit() | out-null

 

關于powershell寫入excel的簡單知識先介紹到這,其實,在運行的過程的中您會發現,進程中的每個字段填入excel的過程是非常緩慢的,因為它是一個cell一個cell填入的,而不是一下子拷貝到excel中的,這些將在之后的隨筆中介紹。

  備注:這篇隨筆是參考微軟官方的一片博客并加入自己的理解寫的,后續還將會簡單介紹powershell操作excel&CSV的其它應用。

  如有錯誤,歡迎指正,謝謝!

 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕自拍vr一区二区三区| 91精品国产高清久久久久久91| 久久99久久99精品免观看粉嫩| 91网在线免费观看| 亚洲精品欧美日韩| 日韩三级影视基地| 欧美国产欧美亚洲国产日韩mv天天看完整| 国内精品久久久久久| 国产丝袜一区二区三区免费视频| 国产精品日韩欧美| 51ⅴ精品国产91久久久久久| 欧美亚洲伦理www| 欧美极品美女视频网站在线观看免费| 国产黑人绿帽在线第一区| 6080yy精品一区二区三区| 国产成人+综合亚洲+天堂| 国产精品91久久久久久| 国产亚洲精品久久久久久777| 国产精品久久久久久久久久久不卡| 亚洲资源在线看| 成人国产亚洲精品a区天堂华泰| 日韩av在线免费观看| 久久夜色精品国产欧美乱| 韩国精品久久久999| 亚洲欧洲高清在线| 一本色道久久88综合日韩精品| 九九热r在线视频精品| 国产日韩欧美中文| 538国产精品一区二区免费视频| 国产欧美精品日韩| 黑人与娇小精品av专区| 亚洲欧美另类在线观看| 裸体女人亚洲精品一区| 欧美成人激情视频免费观看| 精品国产欧美成人夜夜嗨| 久久成人亚洲精品| 国产精品吹潮在线观看| 川上优av一区二区线观看| 日韩精品福利网站| 亚洲第五色综合网| 川上优av一区二区线观看| 国产精品入口夜色视频大尺度| 91禁外国网站| 成人有码在线播放| 精品无人区乱码1区2区3区在线| 81精品国产乱码久久久久久| 国产深夜精品福利| 国产精品久久久久久亚洲调教| 久久不射电影网| 中文字幕欧美视频在线| 成人黄色av免费在线观看| 成人福利在线视频| 色中色综合影院手机版在线观看| www.久久色.com| 亚洲午夜未删减在线观看| 国产精品久久久久免费a∨大胸| 欧美激情喷水视频| 亚洲自拍小视频| 亚洲第一av网| 亚洲综合色激情五月| 久久久精品国产网站| 国产精品久久久久久久天堂| 久久亚洲精品一区二区| 亚洲精品国产精品国自产在线| 最新的欧美黄色| 国产精品久久久久久久久久久久久| 懂色av影视一区二区三区| 亚洲欧美日韩一区二区三区在线| 成人欧美一区二区三区黑人孕妇| 欧美中文字幕在线观看| 亚洲人成网站777色婷婷| 国产精品丝袜白浆摸在线| 亚洲嫩模很污视频| 午夜精品久久久久久久白皮肤| 久久久久久久久久久av| 永久555www成人免费| 国产精品久久精品| 久久精品国产69国产精品亚洲| 欧美亚洲成人精品| 福利一区福利二区微拍刺激| 色系列之999| 成人福利视频网| 久久男人资源视频| 亚洲天堂av在线免费观看| 亚洲国产精品美女| 欧美黑人性视频| 国产精品中文久久久久久久| 久久亚洲一区二区三区四区五区高| 97在线精品国自产拍中文| 亚洲综合小说区| 欧美另类xxx| 欧美激情极品视频| 色综合久久中文字幕综合网小说| 日韩av电影免费观看高清| 欧美在线欧美在线| 国产91在线播放九色快色| 亚洲欧美视频在线| 亲爱的老师9免费观看全集电视剧| 北条麻妃99精品青青久久| 欧美成人激情图片网| 最新国产成人av网站网址麻豆| 国产精品极品美女粉嫩高清在线| 国产丝袜视频一区| 亚洲成avwww人| 中文字幕亚洲自拍| 国内精品视频一区| 91久久精品在线| 亚洲精品福利免费在线观看| 丝袜美腿亚洲一区二区| 欧美亚洲一区在线| 国语自产在线不卡| 国产成人avxxxxx在线看| 欧美理论电影网| 亚洲国产欧美一区二区丝袜黑人| 国产精品久久久久影院日本| 久久影视免费观看| 亚洲一二三在线| 91精品视频大全| 亚洲乱码国产乱码精品精| 欧美在线免费观看| 欧美日韩成人精品| 在线亚洲国产精品网| 久久91精品国产91久久跳| 深夜精品寂寞黄网站在线观看| 国产精品久久久久高潮| 久久久久久美女| 久久精品小视频| 欧美做受高潮电影o| 中文国产亚洲喷潮| 日av在线播放中文不卡| 疯狂做受xxxx高潮欧美日本| 在线视频国产日韩| 亚洲男人天天操| 日日骚久久av| 热门国产精品亚洲第一区在线| 久久亚洲精品一区| 在线观看日韩av| 精品性高朝久久久久久久| 4k岛国日韩精品**专区| 欧美国产激情18| 大桥未久av一区二区三区| 91精品久久久久久久久不口人| 国产午夜精品全部视频在线播放| 情事1991在线| 8090理伦午夜在线电影| 精品国产欧美一区二区五十路| 国内成人精品视频| 欧美极品xxxx| 精品国产鲁一鲁一区二区张丽| 亚洲一区二区久久久久久| 精品久久久久久久久久久久久| 欧美制服第一页| 色噜噜亚洲精品中文字幕| 98午夜经典影视| 亚洲人午夜精品免费| 亚洲成色777777在线观看影院| 亚洲国产私拍精品国模在线观看| 国产成人精品视频在线观看| 91在线免费看网站| 国产精品亚洲视频在线观看| 91亚洲午夜在线| 欧美精品18videosex性欧美| 日韩美女视频免费看| 久久99久国产精品黄毛片入口|