Открытие файла Excel с использованием формул разбиения New-Object, использование Invoke-Item не

Мне нужно запустить скрипт, который просто открывает файл Excel, вычисляет ячейку Excel, связанную с Pi DataLink, а затем сообщает мне значение.

Если я попытаюсь сделать это стандартным способом:

$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?

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()

Обновить

Надстройки Excel можно добавить в powershell, используя свойство Addins следующим образом:

$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"
Другие вопросы по тегам