0

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

使用 Invoke-Item 打开电子表格后,是否有某种方法可以获取单元格 A1 中的值?

4

1 回答 1

1

我不确定你为什么会得到#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"
于 2014-08-19T22:05:22.703 回答