2014-11-23 78 views
0

我有一個過程,它將查找單元格中的值並將其與數組進行比較,然後它將使用第二個數組中的相應值替換該值。加快文件的Excel PowerShell修改

該腳本正在工作,但我正在研究如何調整它並使其更快。

$ColorCodes = "001", "002", "003" 
$FAColors = "Blue", "Red", "White" 
$XLSXDoc = "c:\Users\w0517\Desktop\ColorCodes.xlsx" 
$SheetName = "Sheet1" 
$Excel = New-Object -ComObject "Excel.Application" 
$Workbook = $Excel.workbooks.open($XLSXDoc) 
$Sheet = $Workbook.Worksheets.Item($SheetName) 
$WriteData = $Excel.WorkSheets.Item($SheetName) 
$RowCount = ($Sheet.usedRange.rows).count 
write-host The Excel Sheet Has $RowCount Rows 
For ($J=2; $J -le $RowCount; $J++) 
    { 
     $MainColor = $Sheet.Cells.Item("$J",2).Text 
     $ArrayIndex = [array]::IndexOf($FAColors, $MainColor) 
     $WriteData.Cells.Item("$J",2) = $ColorCodes[$ArrayIndex] 

    } 
$Excel.Visible = $true 

回答

1

對整列使用內置Replace()方法會比單獨更改每個細胞快得多:

$colors = @{ 
    'Blue' = "'001" 
    'Red' = "'002" 
    'White' = "'003" 
} 

$wbName = 'C:\Users\w0517\Desktop\ColorCodes.xlsx' 
$wsName = 'Sheet1' 

$xl = New-Object -COM 'Excel.Application' 
$wb = $xl.Workbooks.Open($wbName) 
$ws = $wb.Worksheets.Item($wsName) 

$colors.Keys | % { 
    $ws.Cells.Item(1,2).EntireColumn.Replace($_, $colors[$_]) 
} 

$xl.Visible = $true 
+0

會嘗試儘快給您 – 2014-11-23 18:22:24

+0

爲什麼值會被插入如int,雖然單元格格式類型是文本,但它顯示2而不是002 – 2014-11-23 22:01:46

+0

@ AhmedAl-Haffar使用單引號將值前綴以防止出現這種情況。 – 2014-11-23 23:47:10