Что нового

[Данные, строки] Чтение URL из ячейки Excel

Olorin

Новичок
Сообщения
28
Репутация
0
Привет всем autoit`ерам! Новичок я здесь, но :IL_AutoIt_1:

Мучаю проблему чтения URL из ячейки экселевской, и все немогу победить данный вопрос.

Есть такая функция excelhyperlinkinsert (вставка ссылки в ячейку), на основе нее никак не смог сделать функцию чтения URL

Может кто из сообщества может подсказать как победить ?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Этот пример считывает все URLы со всех листов документа.
Код:
$oExcel = ObjCreate('Excel.Application')
$sFilePath = 'c:\1.xls'
$oExcel.Visible = False
$oExcel.WorkBooks.Open($sFilePath, Default, False)
$oSheets = $oExcel.ActiveWorkbook.Sheets
$sText = ''
For $oSheet In $oSheets
	$oHyperlinks = $oSheet.Hyperlinks
	For $oHyperlink In $oHyperlinks
		$sText &= $oHyperlink.Address & @CRLF
	Next
Next
$oExcel.Quit
ConsoleWrite($sText)

Но если нужно считать с одной конкретной ячейки то так:
Код:
$oExcel = ObjCreate('Excel.Application')
$sFilePath = 'c:\1.xls'
$oExcel.Visible = False
$oExcel.WorkBooks.Open($sFilePath, Default, False)
ConsoleWrite($oExcel.Activesheet.Range('F14').Hyperlinks(1).Address & @CRLF)
$oExcel.Quit
 
Автор
O

Olorin

Новичок
Сообщения
28
Репутация
0
Спасибо большо, переделал под функцию из стандартной UDF

Код:
Func _ExcelReadCellHyperLink($oExcel, $sRangeOrRow, $iColumn = 1)
	If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
	If Not StringRegExp($sRangeOrRow, "[A-Z,a-z]", 0) Then
		If $sRangeOrRow < 1 Then Return SetError(2, 0, 0)
		If $iColumn < 1 Then Return SetError(2, 1, 0)
		Return $oExcel.Activesheet.Cells($sRangeOrRow, $iColumn).Hyperlinks(1).Address	
	EndIf
EndFunc

Вот как то так.
Только там в конце еще было
Код:
Return $oExcel.Activesheet.Range($sRangeOrRow).Value
, не совсем понял как это писпособить и надо ли это.

А где надо было в интернете искать что .Value Надо заменить на .Hyperlinks(1).Address ?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
.Hyperlinks(1).Address выдаст первый адрес из всех ссылок, выбранного диапазона(столбца, строки, одной ячейки или кучи ячеек)

Код:
$oHyperlinks = $oExcel.Activesheet.Range($sRangeOrRow).Hyperlinks ; все ссылки диапазона Range
; а дальше нужно думать что нам надо на выходе - так выдаст текст со всеми ссылками, разделенными разрывом строки:
$sText = ''
For $oHyperlink In $oHyperlinks
    $sText &= $oHyperlink.Address & @CRLF
Next
Return $sText
; можно выдать массив ссылок:
Dim $aURLs[$oHyperlinks.Count + 1] ; объявляем массив размером равным общему количеству ссылок + 1
$aURLs[0] = $oHyperlinks.Count ; первым элементом будет общее количество ссылок
$iCounter = 1 ; счетчик элементов
For $oHyperlink In $oHyperlinks
    $aURLs[$iCounter] = $oHyperlink.Address ; по очереди добавляем элементы в массив
    $iCounter += 1
Next
Return $aURLs
 
Верх