繁体   English   中英

XML 文件映射以获取 CSV 值然后使用 Z3D265B4E1EEEF0DDF17881FA0Z3B1 打开 Excel

[英]XML File Mapping to get CSV Value then Open Excel using PowerShell

我这里有我的 XML、CSV 和 Excel 文件。

我正在尝试从我的 XML 文件的“密钥”中获取所有数字。

设置.xml

$DocNo = $XML.Settings.Setting.Key

然后从我的 CSV 文件中获取该数字的所有对应文件名。

设置.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM