Что нового

Как получить гиперссылку из ячейки файла Excel в переменную.

Malderin

Новичок
Сообщения
68
Репутация
1
Есть простой файл эксель, есть столбец, в котором под текстом скрываются гиперссылки. Вопрос, как получить эти гиперссылки (путь) в переменные?
В UDF excel нашел только как добавить гиперссылку в файл, а вот как извлечь не знаю, подскажите.
Тестовый файл прилагаю.
 

Вложения

  • Test.zip
    6.4 КБ · Просмотры: 3
Решение
Код:
#include <Excel.au3>
Local $oExcel = _Excel_Open(False)
If @error Then Exit 1

$oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & '\Test.xlsx')
If @error Then
    _Excel_Close($oExcel)
    Exit 2
EndIf
; Узнаем гиперссылку в определенной ячейке:
$sStr = $oWorkbook.Activesheet.Range('B1').Hyperlinks.Item(1).Address
MsgBox(262144, Default, '[' & $sStr & ']') ; •••••••••• П Р О В Е Р К А ••••••••••

; Перечисляем все гиперссылки в документе:
For $oElement In $oWorkbook.Activesheet.Hyperlinks
    ConsoleWrite($oElement.Address & @LF) ; •••••••••• П Р О В Е Р К А ••••••••••
Next

_Excel_BookClose($oWorkbook, False)
_Excel_Close($oExcel, False)

Сообщение автоматически объединено:

И в догонку, вот вам почитать: Полный путь гиперссылки в Excel.
Автор
M

Malderin

Новичок
Сообщения
68
Репутация
1
Неплохо бы.

Да и на скрипт, его генерирующий, тоже интересно взглянуть.
Да, первый раз аттач не прирепился, поправил. А файл самый обычный, созданный вручную для примера. Маленькая таблица с гиперссылками в одном столбце.
 

xXx

╚{■_■}╗
Меценат
Сообщения
245
Репутация
94
Код:
#include <Excel.au3>
Local $oExcel = _Excel_Open(False)
If @error Then Exit 1

$oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & '\Test.xlsx')
If @error Then
    _Excel_Close($oExcel)
    Exit 2
EndIf
; Узнаем гиперссылку в определенной ячейке:
$sStr = $oWorkbook.Activesheet.Range('B1').Hyperlinks.Item(1).Address
MsgBox(262144, Default, '[' & $sStr & ']') ; •••••••••• П Р О В Е Р К А ••••••••••

; Перечисляем все гиперссылки в документе:
For $oElement In $oWorkbook.Activesheet.Hyperlinks
    ConsoleWrite($oElement.Address & @LF) ; •••••••••• П Р О В Е Р К А ••••••••••
Next

_Excel_BookClose($oWorkbook, False)
_Excel_Close($oExcel, False)

Сообщение автоматически объединено:

И в догонку, вот вам почитать: Полный путь гиперссылки в Excel.
 
Последнее редактирование:
Решение
Автор
M

Malderin

Новичок
Сообщения
68
Репутация
1
Код:
#include <Excel.au3>
Local $oExcel = _Excel_Open(False)
If @error Then Exit 1

$oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & '\Test.xlsx')
If @error Then
    _Excel_Close($oExcel)
    Exit 2
EndIf
; Узнаем гиперссылку в определенной ячейке:
$sStr = $oWorkbook.Activesheet.Range('B1').Hyperlinks.Item(1).Address
MsgBox(262144, Default, '[' & $sStr & ']') ; •••••••••• П Р О В Е Р К А ••••••••••

; Перечисляем все гиперссылки в документе:
For $oElement In $oWorkbook.Activesheet.Hyperlinks
    ConsoleWrite($oElement.Address & @LF) ; •••••••••• П Р О В Е Р К А ••••••••••
Next

_Excel_BookClose($oWorkbook, False)
_Excel_Close($oExcel, False)

Сообщение автоматически объединено:

И в догонку, вот вам почитать: Полный путь гиперссылки в Excel.
Вроде все заработало, но вот когда я взял свой файл, не тестовый, обнаружил, что перебор гиперссылок останавливается задолго до конца столбца с ними.
Перебор с начинается с ячейки А2 и останавливается на А177. Есть вариант решения?
 

Вложения

  • Перечень.zip
    65.6 КБ · Просмотры: 2

xXx

╚{■_■}╗
Меценат
Сообщения
245
Репутация
94
обнаружил, что перебор гиперссылок останавливается задолго до конца
Это не так, просто список выводится не так как вы его наблюдаете, а как сохранен в коллекции.
Код:
#include <Excel.au3>
#include <Array.au3>
Local $oExcel = _Excel_Open(False)
If @error Then Exit 1

Global $iUb, $aArray[1][4], $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & '\Перечень.xlsx')
If @error Then Exit _Excel_Close($oExcel)

For $oElement In $oWorkbook.Activesheet.Hyperlinks ; https://docs.microsoft.com/en-us/office/vba/api/excel.hyperlinks
    $iUb += 1
    ReDim $aArray[$iUb + 1][4]
    $aArray[$iUb][0] = StringReplace($oElement.Range.Address, '$', '') ; https://docs.microsoft.com/en-us/office/vba/api/excel.range.address
    $aArray[$iUb][1] = $oElement.Name ;                https://docs.microsoft.com/en-us/office/vba/api/excel.hyperlink.name
    $aArray[$iUb][2] = $oElement.Address ;            https://docs.microsoft.com/en-us/office/vba/api/excel.hyperlink.address
    $aArray[$iUb][3] = $oElement.Range.Row ;        https://docs.microsoft.com/en-us/office/vba/api/excel.range.row
Next
$aArray[0][0] = $iUb

_Excel_BookClose($oWorkbook, False)
_Excel_Close($oExcel, False)

_ArrayDisplay($aArray) ; •••••••••• П Р О В Е Р К А ••••••••••
_ArraySort($aArray, 0, 1, 0, 3) ; Сортируем по 4 столбцу
_ArrayDisplay($aArray) ; •••••••••• П Р О В Е Р К А ••••••••••
 
Последнее редактирование:
Автор
M

Malderin

Новичок
Сообщения
68
Репутация
1
Это не так, просто список выводится не так как вы его наблюдаете, а как сохранен в коллекции.
Код:
#include <Excel.au3>
#include <Array.au3>
Local $oExcel = _Excel_Open(False)
If @error Then Exit 1

Global $iUb, $aArray[1][4], $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & '\Перечень.xlsx')
If @error Then Exit _Excel_Close($oExcel)

For $oElement In $oWorkbook.Activesheet.Hyperlinks ; https://docs.microsoft.com/en-us/office/vba/api/excel.hyperlinks
    $iUb += 1
    ReDim $aArray[$iUb + 1][4]
    $aArray[$iUb][0] = StringReplace($oElement.Range.Address, '$', '') ; https://docs.microsoft.com/en-us/office/vba/api/excel.range.address
    $aArray[$iUb][1] = $oElement.Name ;                https://docs.microsoft.com/en-us/office/vba/api/excel.hyperlink.name
    $aArray[$iUb][2] = $oElement.Address ;            https://docs.microsoft.com/en-us/office/vba/api/excel.hyperlink.address
    $aArray[$iUb][3] = $oElement.Range.Row ;        https://docs.microsoft.com/en-us/office/vba/api/excel.range.row
Next
$aArray[0][0] = $iUb

_Excel_BookClose($oWorkbook, False)
_Excel_Close($oExcel, False)

_ArrayDisplay($aArray) ; •••••••••• П Р О В Е Р К А ••••••••••
_ArraySort($aArray, 0, 1, 0, 3) ; Сортируем по 3 столбцу
_ArrayDisplay($aArray) ; •••••••••• П Р О В Е Р К А ••••••••••
да вы правы, спасибо!
 
Верх