使用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"