[英]XML File Mapping to get CSV Value then Open Excel using PowerShell
我这里有我的 XML、CSV 和 Excel 文件。
我正在尝试从我的 XML 文件的“密钥”中获取所有数字。
$DocNo = $XML.Settings.Setting.Key
然后从我的 CSV 文件中获取该数字的所有对应文件名。
Foreach ($Line in $CSVContent) {
# (-split) the Array of Strings by Separating them from ","
$LineSplit = $Line -split ","
# Find the $Line that has the Value of $DocNo
If ($LineSplit -like $DocNo) {
# Store the String Value of $DocNo in "$FileNames"
$FileNames = $LineSplit
}
}
Write-Host $FileNames
然后使用 $FileNames 作为要作为工作簿打开的文件名。
# For every Number of Key
ForEach($Files in $DocNo){
# Open their Excel Workbook (INSERT THE FILENAME OF THE FILE NO. FROM CSV)
$WorkBook = $Excel.Workbooks.Open($Files.$FileNames)
}
问题是我的 $FileNames 中没有显示任何值。 我可以显示 $FileNames 但我必须一一专门调用它们。 任何建议和帮助将不胜感激:)
在第一个代码块中, $LineSplit
是在 CSV 文件的一行上使用-split
的结果。 $LineSplit
是一个数组,在您的情况下,该数组包含 CSV 文件中每一行的两个元素:
$LineSplit[0] = '1'
$LineSplit[1] = 'File1.xlsx'
方括号表示法允许您从 select 数组中的一个元素按其 position 在数组中,从零开始。
第一个代码块的问题是条件($LineSplit -like $DocNo)
正在使用 like 运算符将数组与数组进行比较,我不确定那会做什么,但很难理解。 我会考虑将其重新编码如下:
if ($LineSplit[0] -in $DocNo)
这将询问 CSV 行的第一列是否在从 XML 文件中提取的列表中,然后继续。
下一个问题是$FileNames
变量的构建。 每次在您的代码中执行此语句时:
$FileNames = $LineSplit
表示当前 CSV 行的两元素数组$LineSplit
用逗号分隔,覆盖$FileNames
的值。 到循环结束时,这仅包含与条件匹配的最后一个 CSV 行。 这应该被重新编码为一个数组。 在循环设置一个空数组之前:
$FileNames = @()
现在,在满足条件的循环期间:
$FileNames += $LineSplit[1]
回想一下$LineSplit[1]
包含文件名,因为它是 CSV 行的第二个元素,当它被逗号分割时。 在循环结束时, $FileNames
变量应该包含一个文件数组,这些文件位于 CSV 和 XML 中。 +=
位是添加新元素而不覆盖的运算符。
最后,第二个代码块很接近,但不完全在那里。 循环遍历$DocNo
中的值,根据您的屏幕截图,这些值是:
1,2,3,4,5,6
这些值被放入每个循环的$Files
变量中 - 然后$File.$FileNames
语法不正确,它试图从从$DocNo
值检索到的数字中检索属性。 这些值只是整数,因此没有要检索的$FileNames
属性。 循环应该遍历我们已经构建的列表
ForEach ($File in $FileNames) {
# Open their Excel Workbook (INSERT THE FILENAME OF THE FILE NO. FROM CSV)
$WorkBook = $Excel.Workbooks.Open($File)
}
最后提示,使用Write-Host
显示变量的值,如 go,例如
Write-Host $LineSplit[0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.