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?エラーが発生します。そして、最初の 3 行を使用して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 に答える