我需要运行一个脚本,只是打开一个excel文件,计算与Pi DataLink连接的excel单元格,然后告诉我的值。
如果我尝试按照标准的方式来做:
$objExcel = New-Object -com Excel.Application
$objExcel.Visible = $True
$WorkBook = $objExcel.Workbooks.Open("C:Userscrclaytonsheet.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:Userscrclaytonsheet.xlsx"
我没有得到#NAME?
错误,我可以运行计算,excel理解这个公式。
也许是这样的?
Invoke-Item "C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE"
Start-Sleep 10
$objExcel = Get-Process "EXCEL.EXE"
$WorkBook = $objExcel.Workbooks.Open("C:Userscrclaytonsheet.xlsx")
$WorkSheet = $WorkBook.Sheets.Item("Sheet1")
write-host $worksheet.Range("A1").Text
是否有一些方法可以在使用Invoke-Item打开电子表格的单元格A1中获得值?
我不知道为什么你得到#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:Userscrclaytonsheet.xlsx")
$WorkSheet = $WorkBook.Sheets.Item(1)
write-host $worksheet.Range("D18").Text
$WorkBook.Save()
$WorkBook.Close()
$objExcel.Quit()
Excel插件可以通过使用addins属性在powershell中添加,如下所示:
$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:Userscrclaytonsheet.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)PIPCExcelPITrendXL.xla", $True)
$ExcelAddin.Installed = "True"
$ExcelAddin = $WorkBook.Application.AddIns.Add("C:Program Files (x86)PIPCExcelpipc32.xll", $True)
$ExcelAddin.Installed = "True"
$ExcelAddin = $WorkBook.Application.AddIns.Add("C:Program Files (x86)PIPCExcelOSIsoft.PIDataLink.UI.dll.manifest", $True)
$ExcelAddin.Installed = "True"