Войти

Показать полную графическую версию : [решено] Работа с 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

Kazun
29-09-2017, 13:22
$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

Kazun
29-09-2017, 14:06
Заменить ; на , ?

firstarey
29-09-2017, 14:26
Заменить ; на , ? »
нет. тогда Excel ругается "Ошибка в формуле".
у гиперссылки разделение между текстом который выводится и путем должно быть именно ;

Заменить ; на , ? »
натолкнуло на другую мысль:
$ws.Cells.Item($Row,6) ="=ГИПЕРССЫЛКА(`"$OutPath`")"

тогда гиперссылка вставляется в файл корректно, но при открытии Excel вместо синей ссылки #ИМЯ? жму энтр и гиперссылка становиться активной. что теперь не так ?

Kazun
29-09-2017, 14:37
А если вместо ГИПЕРССЫЛКА поставить 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, но экранировать так `; или \; не вышло

Kazun
29-09-2017, 14:54
Через HyperLinks?

$ws.Hyperlinks.Add($ws.Cells.Item($Row,6),"$OutPath","","","$OutPath") | Out-Null

Iska
29-09-2017, 14:58
Есть два момента:

Следует использовать свойство «.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», а не умолчальное свойство »
Благодарю!
именно этого свойства и не хватало.

Iska
29-09-2017, 15:35
firstarey, я там выше, кстати, ненароком сбрехал насчёт «умолчального свойства .Value». На самом же деле:
https://i.imgur.com/glPn6aw.png
Зачеркнул «умолчальное» в сообщении выше, дабы не возводить напраслину.




© OSzone.net 2001-2012