我有一个从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。
我做错了什么?
答案 0 :(得分:5)
$xl.Workbooks.OpenText
返回void而不是工作簿。
进行此更改:
$xl.Workbooks.OpenText($csv_filename)
$wb=$xl.ActiveWorkbook