Открытие файла 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"