2015-04-28 158 views
2

我在Excel中打開一個CSV文件並運行此宏以更改背景顏色。我試圖將這部分代碼轉換爲PowerShell。將代碼從Excel宏轉換爲PowerShell

lrow = Range("G" & Rows.Count).End(xlUp).Row 
    Set MR = Range("G2:G" & lrow) 
    For Each cell In MR 
     If UCase(Trim(cell.Value)) = "FALSE" Then 
      cell.Interior.ColorIndex = 3 
     End If 
    Next 

任何幫助將此代碼轉換爲PowerShell。

感謝 SR

+1

http://blogs.technet.com/b/heyscriptingguy/archive/2006/09/08/how-can-i-use-windows-powershell-to-automate-microsoft-excel.aspx –

+2

http://sdb.planetcobalt.net/vba2psh.shtml –

回答

1

你可以寫這樣的事情:

$objExcel = New-Object -ComObject Excel.Application 

$objExcel.Visible = $true 
$objExcel.DisplayAlerts = $false 

$filePath = "c:\logs\2015-04-23.csv" 

$xlsFilePath = Get-Item -Path $filePath | % { Join-Path (Split-Path $_ -Parent) "$($_.BaseName).xls" } 

$workBook = $objExcel.Workbooks.Open($filePath) 
$workSheet = $WorkBook.sheets | select -First 1 

$xlup = -4162 

$lrow = $workSheet.cells.Range("G" + $workSheet.Rows.Count).End($xlup).Row 

$workSheet.cells.Range("G2:G" + $lrow) | % { 
    $value = $_.Text 
    if($value.ToUpper() -eq "TRUE"){ 
     $_.Interior.ColorIndex = 3 
    } 
} 

$WorkBook.SaveAs($xlsFilePath, 18) 
$objExcel.Quit() 

如果你有一個非常大的文件,這是更快地搜索使用PowerShell然後更新Excel工作表中的值。下面的例子看起來有點有趣,但執行速度要快得多。

$filePath = "c:\logs\2015-04-23.csv" 

$rowAliases = 97..122 | foreach { ([char]$_).ToString().ToUpper() } 
$selectedRow = "G" 
$selectedName = (Get-Content $filePath -ReadCount 1 -TotalCount 1).Split(",")[$rowAliases.IndexOf($selectedRow)] 
$startRow = 2 
$rowCount = 1; 

$objExcel = New-Object -ComObject Excel.Application 

$objExcel.Visible = $true 
$objExcel.DisplayAlerts = $false 

$xlsFilePath = Get-Item -Path $filePath | % { Join-Path (Split-Path $_ -Parent) "$($_.BaseName).xls" } 

$workBook = $objExcel.Workbooks.Open($filePath) 
$workSheet = $WorkBook.sheets | select -First 1 

Import-Csv -Path $filePath | % { 

    if($rowCount -ge $startRow){ 
     [string]$value = $_ | select -ExpandProperty $selectedName 

     if($value.ToUpper() -eq "TRUE"){ 
      $workSheet.cells.Item($rowCount + 1, $selectedIndex + 1).Interior.ColorIndex = 3 
     } 
    } 

    $rowCount ++ 
} 

$WorkBook.SaveAs($xlsFilePath, 18) 
$objExcel.Quit()