为什么在使用powershell将csv文件转换为excel时出现空值表达式错误?

为什么在使用powershell将csv文件转换为excel时出现空值表达式错误?,excel,powershell,Excel,Powershell,我有一个powershell脚本,可以从yahoo finance下载CSV文件,我的目标是将其转换为excel文件.xlsx。剧本是: $path = "D:" $client = New-Object System.Net.WebClient $url = "http://download.finance.yahoo.com/d/quotes.csv?s=EDV,VEA,VWO,VHT,BND,VTI&f=sl1d1t1c1ohgv&e=.csv" $csv_filenam

我有一个powershell脚本,可以从yahoo finance下载CSV文件,我的目标是将其转换为excel文件.xlsx。剧本是:

$path = "D:"

$client = New-Object System.Net.WebClient
$url = "http://download.finance.yahoo.com/d/quotes.csv?s=EDV,VEA,VWO,VHT,BND,VTI&f=sl1d1t1c1ohgv&e=.csv"
$csv_filename = Join-Path $path "prices.csv"
$client.DownloadFile($url, $csv_filename)

$xl_filename = Join-Path $path "prices.xlsx"

$xl = New-Object -COM "Excel.Application"
$xl.Visible = $true

$wb = $xl.Workbooks.OpenText($csv_filename)
$wb.SaveAs($xl_filename, 51)
$wb.Close()

$xl.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
脚本位于'D:\get\u prices.ps1'中,我使用

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe-ExecutionPolicy Unrestricted-文件D:\get\u prices.ps1

当我运行它时,会出现两个错误:

You cannot call a method on a null-valued expression.
At D:\get_prices.ps1:14 char:11
+ $wb.SaveAs <<<< ($xl_filename, 51)
    + CategoryInfo          : InvalidOperation: (SaveAs:String) [], RuntimeExc
   eption
    + FullyQualifiedErrorId : InvokeMethodOnNull

You cannot call a method on a null-valued expression.
At D:\get_prices.ps1:15 char:10
+ $wb.Close <<<< ()
    + CategoryInfo          : InvalidOperation: (Close:String) [], RuntimeExce
   ption
    + FullyQualifiedErrorId : InvokeMethodOnNull
转换代码改编自此问题答案

我看了文档,我知道我在正确使用它,51参数的文件格式也是正确的。我还看了一些文档,看起来都是正确的

根据get-host和Excel 2013,我在Windows 7 x64上使用powershell v2.0

我做错了什么?

$xl.Workbooks.OpenText返回void而不是工作簿

进行以下更改:

$xl.Workbooks.OpenText($csv_filename)
$wb=$xl.ActiveWorkbook
$xl.Workbooks.OpenText返回的不是工作簿,而是void

进行以下更改:

$xl.Workbooks.OpenText($csv_filename)
$wb=$xl.ActiveWorkbook