将双引号添加到来自数组

时间:2016-03-24 19:41:00

标签: powershell

我正在创建一个对Excel文件执行某些操作的函数。 Excel文件列表作为名为$excelFiles的数组传递给函数。下面显示的代码正在进行中(它还没有完成它打算做的所有事情)。到目前为止,这段代码似乎失败了,因为$excelFile中保存的字符串周围没有引号设置$wb变量(就在嵌套foreach之前):

Function CovertExcelFileToTextFiles ($excelFiles)
{

    # create an Excel application object (fire off Excel in the background)
    $excelApp = New-Object -ComObject Excel.Application
    $excelApp.Visible = $false
    $excelApp.DisplayAlerts = $false

    # get first 3 letters of each file's name
    foreach ($excelFile in $excelFiles)
    {
        $name = Split-Path $excelFile.FullName -Leaf  #get filename only from full path
        $prefix = $name.Substring(0,3)  #get first 3 letters of filename

        #look at contents of this variable
        $excelFile

        $wb = $excelApp.Workbooks.Open($excelFile)        
        foreach ($ws in $wb.Worksheets)
        {
            $n = $prefix + "_"+ $ws.Name
            $n
        }
    }
    $excelApp.Quit()
}

以下是控制台中显示的错误: enter image description here

我怀疑问题是缺少引号的原因是,如果将$wb设置为硬编码文件路径,则代码可以正常工作。

我很难弄清楚如何在变量周围加上双引号以输入设置$wb的行。我试过"$excelFile"并且编辑在它下面放了一条红色的波浪线显然是不允许的。我还尝试创建一个新变量并用"$excelFile"填充它,然后将其插入$wb行的括号中。这也导致控制台出错。双引号如何放在$excelFile附近?

1 个答案:

答案 0 :(得分:0)

缺少报价不是你的问题。当您对文件进行硬编码并使用引号时,引号会告诉解析器它是一个字符串;它们不是字符串值的一部分。

您需要知道$excelFile是什么数据类型(即$excelFiles what 的数组?)。

如果您使用$excelFile.FullName是正确的,那么您似乎正在处理某个对象。

在这种情况下,.Open()方法可能需要[String],并且无法理解您传递的对象,请尝试:

$wb = $excelApp.Workbooks.Open($excelFile.FullName) 

解决此类问题的一个好方法是使用PowerShell ISE,然后设置断点。

在你的情况下,在$wb = ...行设置一个断点,执行,当命中断点时,执行将在该行停止(在执行之前)。

此时,您可以使用控制台执行将在运行代码的上下文中运行的语句。例如,您可以运行:

$excelFile.GetType()

$excelFile | Get-Member

了解有关您正在处理的对象的一些事情。您可以查看其属性等:

$excelFile.FullName

您可以查看您正在调用的方法的重载:

$excelApp.Workbooks.Open   # <-- note no parentheses