Показать полную графическую версию : [решено] Работа с Excel
firstarey
29-09-2017, 13:11
была машина с винХР и PS2 - код работал
обновили систему до вин7 и PS5 - код не работает
заполняет конкретную ячейку в Excel
$ws.Cells.Item($Row,6)= "`=ГИПЕРССЫЛКА(`"$OutPath`";`"$OutPath`")"
выдает ошибку
Исключение из HRESULT: 0x800A03EC
At D:\script\PowerShell\XML_sort\XML-statistics.ps1:182 char:3
+ $ws.Cells.Item($Row,6)= "`=ГИПЕРССЫЛКА(`"$OutPath`"`;`"$OutPa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
$ws.Cells.Item($Row,6).Value2= "`=ГИПЕРССЫЛКА(`"$OutPath`";`"$OutPath`")"
firstarey
29-09-2017, 13:34
Kazun, благодарю что откликнулись!
к сожалению не помогло, ошибка та же.
если добавить кавычек
$ws.Cells.Item($Row,6) = """`=ГИПЕРССЫЛКА(`"$OutPath`";`"$OutPath`")"""
то данные в Excel вносятся, но в кавычках (подчеркнуто)
"=ГИПЕРССЫЛКА("$OutPath";"$OutPath")"
"=ГИПЕРССЫЛКА("D:\test\ГКН2\59 Пермский край\59-34 Соликамский\59-34-2780101\0055";"D:\test\ГКН2\59 Пермский край\59-34 Соликамский\59-34-2780101\0055")"
а они не нужны. без них было бы хорошо.
в переменной $OutPath примерно такое:
D:\test\ГКН2\59 Пермский край\59-34 Соликамский\59-34-2780101\0055
firstarey
29-09-2017, 14:26
Заменить ; на , ? »
нет. тогда Excel ругается "Ошибка в формуле".
у гиперссылки разделение между текстом который выводится и путем должно быть именно ;
Заменить ; на , ? »
натолкнуло на другую мысль:
$ws.Cells.Item($Row,6) ="=ГИПЕРССЫЛКА(`"$OutPath`")"
тогда гиперссылка вставляется в файл корректно, но при открытии Excel вместо синей ссылки #ИМЯ? жму энтр и гиперссылка становиться активной. что теперь не так ?
А если вместо ГИПЕРССЫЛКА поставить HYPERLINK?
firstarey
29-09-2017, 14:43
А если вместо ГИПЕРССЫЛКА поставить HYPERLINK? »
никаких изменений
Исключение из HRESULT: 0x800A03EC
At D:\script\PowerShell\XML_sort\XML-statistics.ps1:182 char:3
+ $ws.Cells.Item($Row,6) = "`=HYPERLINK(`"$OutPath`";`"$OutP ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
видимо ; очень мешает взаимодействию PS и Excel, но экранировать так `; или \; не вышло
Через HyperLinks?
$ws.Hyperlinks.Add($ws.Cells.Item($Row,6),"$OutPath","","","$OutPath") | Out-Null
Есть два момента:
Следует использовать свойство «.Formula», а не умолчальное свойство «.Value» или «.Value2».
Содержимое свойства следует задавать в англоязычном формате.
Внутренние двойные кавычки банально экранируем. Например:
$OutPath = 'D:\test\ГКН2\59 Пермский край\59-34 Соликамский\59-34-2780101\0055'
$Row = 1
$oExcel = New-Object -ComObject 'Excel.Application'
$oExcel.Visible = $true
$oWorkbook = $oExcel.Workbooks.Add()
$oWorkbook.Worksheets.Item(1).Cells.Item($Row, 6).Formula = "=HYPERLINK(`"$OutPath`",`"$OutPath`")"
https://i.imgur.com/9DgL34D.png
Дополнением к предыдущему.
Сначала я, как и положено посконно-истинно-православному ;), пробовал .FormulaLocal, но, видимо, где-то что-то сделал не так, посему решил списать сие на издержки реализации Automation в PowerShell, и переключился на «.Formula». Вторая попытка оказалась удачнее :):
$oWorkbook.Worksheets.Item(1).Cells.Item($Row, 6).FormulaLocal = "=ГИПЕРССЫЛКА(`"$OutPath`";`"$OutPath`")"
firstarey
29-09-2017, 15:18
Следует использовать свойство «.Formula», а не умолчальное свойство »
Благодарю!
именно этого свойства и не хватало.
firstarey, я там выше, кстати, ненароком сбрехал насчёт «умолчального свойства .Value». На самом же деле:
https://i.imgur.com/glPn6aw.png
Зачеркнул «умолчальное» в сообщении выше, дабы не возводить напраслину.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.