使用新对象打开 excel 文件会破坏公式,使用调用项不会



我需要运行一个脚本,只是打开一个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"

相关内容

  • 没有找到相关文章

最新更新