Powershell 對Excel文件的幾種操作方法


一、如何通過powershell打開一個Excel表格,

1 $file_excel = Get-Item ("D:\Powershell_test\test.xlsx")
2 $Excel = New-Object -ComObject Excel.Application
3 $Excel.Visible = $true 4 $WorkBook = $Excel.Workbooks.Open($file_excel)
5 $WorkSheet = $Workbook.Sheets.Item("Status")
6 $SheetRow = $WorkSheet.UsedRange.Rows.Count
1、第一行是通過Get-Item把D盤Powershell_test文件夾下的test.xlsx這個對象賦給$file_excel這個變量。
2、第二行是新建一個Excel對象,並將值賦給$Excel變量

3、第三行是如果希望屏幕上顯示Excel圖形界面,設值為$true,否則為$false,或者直接不寫這行代碼。
4、第四行是將test.xlsx加載進Excel程序
5、第五行是鎖定要操作的sheet,“Status”為sheet名稱,請根據實際情況替換“status”
6、第六行中的$SheetRow統計出來的行數往往不准確,如果表格中的最后幾行數據被認為的“清除內容”了,而不是整行刪除了,那么統計出來的數字就會不准。
7、如果想要准確的數字,可以使用如下循環的方法獲得:
1 $excel_count =0
2 for($b = 1; $b -le $SheetRow; $b++)
3 {
4     if($WorkSheet.Cells.item($b,1).text -ne "") #$b代表行數變量,數字1代表的是表格中的列,通過對$b的循環,獲得有效行數 5     {
6         $excel_count++
7     }
8 }

最后的$excel_count的值就是准確的。

 

二、設置表格的邊框

$WorkSheet.Cells.item(1,1).borders.LineStyle = 1

1、$WorkSheet.Cells.item(1,1)中的(1,1)代表的是第一行中的第一列方格。請根據實際需要替換

 

三、設置表格底色

$WorkSheet.Cells.item($excel_next_valid_row,1).font.size = 10

1、等號右邊的10用來調節顏色,不同的顏色數字不一樣,請根據實際需求對10進行變化。

 

四、關閉Excel的進程函數,一般放在腳本的最上方,當Excel處理完畢需要保存並關閉Excel進程時,需要調用這個函數,具體見下面的代碼

function close-excel ($ref) {
([System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$ref))
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}

 

五、保存Excel並關閉Excel進程

1 $WorkBook.save()
2 $Excel.Workbooks.Close()
3 $Excel.Quit()
4 close-excel($WorkSheet)
5 close-excel($WorkBook)
6 close-excel($Excel)

1、如果需要將Excel另存為,需要將$WorkBook.save()變為$WorkBook.savesa("c:\123\"),文件將會被另存在C盤目錄123下。

 

六、Copy整列數據

 1 $file = “C:\test\test.xlsx” 
 2 $Excel = New-Object -ComObject excel.application 
 3 $Excel.visible = $true
 4 $Workbook = $excel.Workbooks.open($file) 
 5 $Worksheet = $Workbook.WorkSheets.item(“test”) 
 6 $worksheet.activate()  
 7 $range = $WorkSheet.Range(“A1:B1”).EntireColumn 
 8 $range.Copy() | out-null text
 9 $Worksheet = $Workbook.Worksheets.item(2) 
10 $Range = $Worksheet.Range(“D1”) 
11 $Worksheet.Paste($range)  

1、上面的操作是將test.xlsx中的第一個sheet中的A1和B1的整列數據拷貝到第二個sheet的D1開始的列,如果是拷貝行的話,把代碼的第七行中的EntireColumn換成EntireRow。如拷貝A1到A100的數據,$range = $WorkSheet.Range(“A1:A100”).EntireRow

 

七、在Excel中搜索特定字符串,找到后返回行標,該代碼可以替換以for循環為基礎的搜索。比for循環要快的多

 1 #以下代碼可以在電腦屏幕中輸出多個符合搜索條件的行標,如果要輸出多個列標,第10行代碼可以替換為$Column = $Target.Column()
 2 #如果要限定搜多范圍,比如只在C列搜索,則第4行換成$Range = $WorkSheet.Range("C:C")
 3 $SearchString = 'abc'    #在excel中搜索“abc”這個字符串
 4 $Range = $WorkSheet.UsedRange
 5 $Target = $Range.Find($SearchString)
 6 
 7 $First = $Target
 8 Do
 9 {   
10     $row_NO = $Target.row()   
11     Write-Host $row_NO
12     $Target = $Range.FindNext($Target)
13 }
14 While ($Target -ne $NULL -and $Target.row -ne $First.row)

 

八、刪除sheet中的所有有內容的行

1 $Sheetrow=$WorkSheet.UsedRange.Rows.Count
2 $Worksheet.Rows.Delete($sheetrow)

九、刪除sheet中的指定行

$Worksheet.Range("A2:A9").EntireRow.delete()

 十、查看指定列的有效行

$ExcelPath = Get-Item 'F:\xxx.xlsx'
$xldown
= -4121 # see: http://msdn.microsoft.com/en-us/library/bb241212(v=office.12).aspx $xlup = -4162 $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $True $WordBook = $Excel.Workbooks.Open($ExcelPath) $WorkSheet = $Excel.WorkSheets.item("Sheet1") $WorkSheet.activate() # Find the last used cell $lastRow = $Worksheet.cells.Range("A1048576").End($xlup).row

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM