Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Работа с Excel (http://forum.oszone.net/showthread.php?t=330153)

firstarey 29-09-2017 13:11 2767549

Работа с Excel
 
была машина с винХР и 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 2767551

Код:

$ws.Cells.Item($Row,6).Value2= "`=ГИПЕРССЫЛКА(`"$OutPath`";`"$OutPath`")"

firstarey 29-09-2017 13:34 2767553

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 2767555

Заменить ; на , ?

firstarey 29-09-2017 14:26 2767557

Цитата:

Цитата Kazun
Заменить ; на , ? »

нет. тогда Excel ругается "Ошибка в формуле".
у гиперссылки разделение между текстом который выводится и путем должно быть именно ;

Цитата:

Цитата Kazun
Заменить ; на , ? »

натолкнуло на другую мысль:
Код:

$ws.Cells.Item($Row,6)        ="=ГИПЕРССЫЛКА(`"$OutPath`")"
тогда гиперссылка вставляется в файл корректно, но при открытии Excel вместо синей ссылки #ИМЯ? жму энтр и гиперссылка становиться активной. что теперь не так ?

Kazun 29-09-2017 14:37 2767559

А если вместо ГИПЕРССЫЛКА поставить HYPERLINK?

firstarey 29-09-2017 14:43 2767560

Цитата:

Цитата Kazun
А если вместо ГИПЕРССЫЛКА поставить 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 2767563

Через HyperLinks?

Код:

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

Iska 29-09-2017 14:58 2767565

Есть два момента:
  1. Следует использовать свойство «.Formula», а не умолчальное свойство «.Value» или «.Value2».
  2. Содержимое свойства следует задавать в англоязычном формате.
Внутренние двойные кавычки банально экранируем. Например:
Код:

$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`")"



Дополнением к предыдущему.

Сначала я, как и положено посконно-истинно-православному ;), пробовал .FormulaLocal, но, видимо, где-то что-то сделал не так, посему решил списать сие на издержки реализации Automation в PowerShell, и переключился на «.Formula». Вторая попытка оказалась удачнее :):
Код:

$oWorkbook.Worksheets.Item(1).Cells.Item($Row, 6).FormulaLocal = "=ГИПЕРССЫЛКА(`"$OutPath`";`"$OutPath`")"

firstarey 29-09-2017 15:18 2767568

Цитата:

Цитата Iska
Следует использовать свойство «.Formula», а не умолчальное свойство »

Благодарю!
именно этого свойства и не хватало.

Iska 29-09-2017 15:35 2767573

firstarey, я там выше, кстати, ненароком сбрехал насчёт «умолчального свойства .Value». На самом же деле:
Скрытый текст

Зачеркнул «умолчальное» в сообщении выше, дабы не возводить напраслину.


Время: 09:37.

Время: 09:37.
© OSzone.net 2001-