使用New-Object打开公式,打开excel文件,使用Invoke-Item不打开公式
我需要运行一个脚本,打开一个excel文件,计算一个与Pi DataLink连接的Excel单元,然后告诉我这个值。
如果我试图以标准的方式来做到这一点:
$objExcel = New-Object -com Excel.Application $objExcel.Visible = $True $WorkBook = $objExcel.Workbooks.Open("C:\Users\crclayton\sheet.xlsx") $WorkSheet = $WorkBook.Sheets.Item("Sheet1") write-host $worksheet.Range("A1").Text $WorkBook.Save() $WorkBook.Close() $objExcel.Quit()
我收到#NAME?
错误。 即使我只是使用前三行来打开一个Excel文件,看看它,我不能运行计算, =PICurrVal("TAGNAME",0,"SERVERNAME")
只是一个死的公式,Excel的不'不知道我是否这样打开它。 我也试过UpdateLinks
当我打开文件,但没有骰子。
但是,如果我打开这样的文件:
Invoke-Item "C:\Users\crclayton\sheet.xlsx"
我没有收到#NAME?
错误,我可以运行计算和Excel的理解这个公式。
也许这样?
Invoke-Item "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" Start-Sleep 10 $objExcel = Get-Process "EXCEL.EXE" $WorkBook = $objExcel.Workbooks.Open("C:\Users\crclayton\sheet.xlsx") $WorkSheet = $WorkBook.Sheets.Item("Sheet1") write-host $worksheet.Range("A1").Text
有没有办法让单元格A1中的值使用Invoke-Item打开电子表格?
我不确定你为什么获得#NAME?
因为Excel应该完成表格中的所有计算,我们在Powershell中进行的计算是获取单元格的值。
然而,你可以尝试将公式的值输出到附近的单元格,并取得它的值,例如:
你的公式是在D18
– > =PICurrVal("TAGNAME",0,"SERVERNAME")
你的价值是在D19
– > =D18
调用Powershell中的值:
$objExcel = New-Object -com Excel.Application $objExcel.Visible = $True $WorkBook = $objExcel.Workbooks.Open("C:\Users\crclayton\sheet.xlsx") $WorkSheet = $WorkBook.Sheets.Item(1) write-host $worksheet.Range("D18").Text $WorkBook.Save() $WorkBook.Close() $objExcel.Quit()
更新
可以通过使用Addins属性在PowerShell中添加Excel插件,如下所示:
$MyAddin = $Workbook.AddIns.Add('C:\test.xla', $True) $MyAddin.Installed = "True"
您的新完整代码可能看起来像
$objExcel = New-Object -com Excel.Application $objExcel.Visible = $True $WorkBook = $objExcel.Workbooks.Open("C:\Users\crclayton\sheet.xlsx") $MyAddin = $Workbook.AddIns.Add('C:\test.xla', $True) $MyAddin.Installed = "True" $WorkSheet = $WorkBook.Sheets.Item(1) write-host $worksheet.Range("D18").Text $WorkBook.Save() $WorkBook.Close() $objExcel.Quit()
编辑2:
是的,加载项是问题。 我需要添加以下每个文件:
$ExcelAddin = $WorkBook.Application.AddIns.Add("C:\Program Files (x86)\PIPC\Excel\PITrendXL.xla", $True) $ExcelAddin.Installed = "True" $ExcelAddin = $WorkBook.Application.AddIns.Add("C:\Program Files (x86)\PIPC\Excel\pipc32.xll", $True) $ExcelAddin.Installed = "True" $ExcelAddin = $WorkBook.Application.AddIns.Add("C:\Program Files (x86)\PIPC\Excel\OSIsoft.PIDataLink.UI.dll.manifest", $True) $ExcelAddin.Installed = "True"