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

时间:2014-06-04 18:39:31

标签: excel powershell

我有一个从yahoo finance下载CSV文件的powershell脚本,我的目标是将其转换为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_prices.ps1'我用

执行它
  

C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -ExecutionPolicy Unrestricted -File D:\ get_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

转换代码改编自此问答(How to export a CSV to Excel using Powershell)。

我查看了Workbook.SaveAs的文档,据我所知,我正确使用它,文件格式(51参数)也基于this。我还查看了Workbook.Close的文档,看起来一切都正确。

我在Windows 7 x64上使用PowerShell v2.0(根据get-host)和Excel 2013。

我做错了什么?

1 个答案:

答案 0 :(得分:5)

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

进行此更改:

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