我有一个Powershell脚本,它通过一个可以是String或Int32类型的变量运行Excel VLookUp函数。当我将$ Value变量声明为String或Int32时,脚本运行良好,但我如何处理$ Value变量可以是Int32或String形式的事实(例如:$ Value = 155(uint32)或$ Value = 90:9123 80:8989(String))。有任何想法吗?
$files2MX1005 = Get-ChildItem C:\source -Recurse
$Excel = New-Object -ComObject excel.application
[reflection.assembly]::LoadWithPartialName( "Microsoft.Office.Interop.Excel" )
$Excel.visible = $false
$Excel.DisplayAlerts=$False
foreach($fileMX1005 in $files2MX1005) {
$Workbook = $Excel.Workbooks.open($fileMX1005.FullName)
$workbook2 = $Excel.Workbooks.open("C:\Lookup_Table.xlsx")
$range4 = $workbook2.ActiveSheet.Range("A2:E10")
$range = $Workbook.ActiveSheet.Range("A1:FZ1").EntireColumn
$range2 = $Workbook.ActiveSheet.Range("A1:A39").EntireRow
$range.Delete()
$range2.Delete()
$Workbook.SaveAs("C:\StrippedHeader.csv")
$Values = @(Get-Content C:\StrippedHeader.csv -Raw) -split '\s+' | Where-Object {$_ -like '*:*' -or '0.*'}
for ($i = 0; $i -lt $Values.length; $i++) {
if ($Values[$i] -lt 1) { [float]$Values[$i] *= 1440 }
}
"UniqueActiveFaults" |Out-File C:\IdealOutput.csv
$Values | Sort-Object -Unique | Out-File CIdealOutput.csv
$Values2 = @(Get-Content C:\IdealOutput.csv)
$OutputLookUp2 = @()
foreach ($Value in $Values2){
$OutputLookUp2 += "$Value $($Excel.WorksheetFunction.VLookup([int32]$Value,$range4,3,$true))`r`n"
}
Idealoutput.csv的示例:
0.451564(INT32)
0.84645(INT32)
90:4585 90:7878(STRING)
BA:4545 BA:2525(STRING)
0.6587(INT32)
查找的输出最好是:
650(0.451564 * 1440)= X
90:4585 = Y
BA:2525 = Z
等...每个代码。
今天......我得到了
650
90:4585 = Y
BA:2525 = Z
查找650的输出不成功,因为查找不会将其作为字符串读取。
答案 0 :(得分:1)
您可以测试它是否会转换为[int32]。
if ($Value -as [int32] -is [int32])
{'Value is integer'}
else { 'Value is string' }
然后运行该类型的相应代码。
答案 1 :(得分:1)
您不应将值转换为[string]
,而不是[int]
,因此它们会保留原始类型。此外,您不应将中间结果导出并重新导入到文件中,因为您将它们转换为[string]
。
$Workbook.SaveAs("C:\StrippedHeader.csv")
$OutputLookUp2 = @(
-split (Get-Content C:\StrippedHeader.csv -Raw) |
ForEach-Object {
switch -Wildcard ($_){
*:* {$_}
0.* {[int]([double]$_*1440)}
}
} |
Sort-Object {$_ -is [string]},{$_} -Unique |
ForEach-Object {
"$_ $($Excel.WorksheetFunction.VLookup($_,$range4,3,$true))`r`n"
}
)