Hot Link

0 голосов
спросил 25 Май, 11 от Dargin (2,080 баллов) в категории Программные продукты Esri
    Подскажите как через инструмент Hot Link можно ссылать на стройку в Excel файле.
На карте есть слой с клиентами и необходимо при клике на точку в этом слое, чтобы открывался файл excel с подсвеченной (не обязательно подсвеченной) строкой в этом файле, ссылка по полю код договора.

11 Ответы

0 голосов
ответил 25 Май, 11 от Leo_SS (6,820 баллов)
В атрибутивной таблице слоя создайте текстовое поле, до 256 символов, в которое напишите полный путь и имя Excel- файла. Чтобы открыть в отдельном окне этот Excel-файл используйте модуль LeoHotUniversal. А вот как в командной строке передать параметр (строку или ячейку) я к сожелению не знаю. Попробуйте сами, если получится, то эту командную строку полностью вставляйте в атрибутивную таблицу.
0 голосов
ответил 26 Май, 11 от peter1 (7,760 баллов)
0 голосов
ответил 26 Май, 11 от Dargin (2,080 баллов)
Что то даже просто открыть файл экселя не получается:
1) добавил поле с указание адреса (c:\arcview\klient.xlsx)
2) В свойствах темы указал Хот Линк как (Field: созданное поле для хот литнка с сылокой на файл, Predefined Action: Link to Document)
выбираю нужный слой и кликаю молнией но ни чего не происходит

   
0 голосов
ответил 26 Май, 11 от Dargin (2,080 баллов)
     Возникла такая идея, при щелчке инструментом хотлинк он в буфер обмена записывал значение (код договора) и открывая документ екселя сразу осуществлял поиск предварительно вставив значение из буфер и таким образом бы попадали на нужную строку...

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

код для екселя вроде нашел...

Запуск Excel с поиском ячейки.

Q: Как запустить Excel, чтобы оказаться на ячейке содержимое которой известно заранее?
A: Вот как я решил бы твою задачу:

' Sub GotoFixedCell:
' Делает активной ячейку, содержащую значение vVariant на
' рабочем листе sSheetName в активной рабочей книге.
'
' Note: Содержимое ячеек интерпретируется как 'значение'!
'
Public Sub GotoFixedCell(vValue As Variant, sSheetName As String)
Dim c As Range, cStart As Range, cForFind As Range
Dim i As Integer

On Error GoTo errhandle:

Set cForFind = Worksheets(sSheetName).Cells   ' Диапазон поиска
     With cForFind
       Set c = .Find(What:=vValue, After:=ActiveCell, LookIn:=xlValues, _
               LookAt:= xlРart, SearchOrder:=xlByRows,_
               SearchDirection:=xlNext, MatchCase:=False)
       Set cStart = c
       While Not c Is Nothing
        Set c = .FindNext(c)
        If c.Address = cStart.Address Then
           c.Select
           Exit Sub
        End If
       Wend
     End With
Exit Sub
errНandle:
    MsgBox Err.Descriрtion, vbExclamation, "Error #" & Err.Number
End Sub

Нint: Достаточно выполнить этот код из макроса Auto_Oрen()!

Нint: Протестировано и отлажено в Excel'97.
    
0 голосов
ответил 26 Май, 11 от TDenis (42,620 баллов)
Попробуйте в ArcView выполнить скрипт

Clipboard.The.Empty
Clipboard.The.Add("Hello from Arcview")
Clipboard.The.Update

И посмотреть, что находится в буфере обмена.
0 голосов
ответил 26 Май, 11 от Leo_SS (6,820 баллов)
Уважаемый Dargin! Я так понимаю, Вы пытаетесь использовать стандартную процедуру Хот Линк (по-моему она с таблицами работает "сложновато"). Файлы с расширением *.xlsx - Offis 7? Я работаю в ХР, Offis 2003, файлы Excel имеют расширение *.xls. Самый раз попробовать Вам модуль LeoHotUniversal(версия 2), он есть в скриптах DATA+.
0 голосов
ответил 31 Май, 11 от Dargin (2,080 баллов)
Уважаемый Dargin! Я так понимаю, Вы пытаетесь использовать стандартную процедуру Хот Линк (по-моему она с таблицами работает "сложновато"). Файлы с расширением *.xlsx - Offis 7? Я работаю в ХР, Offis 2003, файлы Excel имеют расширение *.xls. Самый раз попробовать Вам модуль LeoHotUniversal(версия 2), он есть в скриптах DATA+.

    Модуль LeoHotUniversal(версия 2) помог спасибо...

и еще небольшой вопрос...
Можно ли в АркВью создавать вычисляемые поля в таблице атрибутов, т.е. если есть общее количство мест и количество занятых мест... добавить динамически меняющееся поле с количеством свободных мест???
0 голосов
ответил 31 Май, 11 от Leo_SS (6,820 баллов)
Для динамической связи между полями можно написать простой скрипт, который бы выполнял арифметические действия с цифровыми полями. Повесить его на кнопку и разместить на панели инструментов. Посмотрите модуль LeoHelp (Tables->Суммирование по рядам) из "Пакета специализированных модулей для ArcView 3.2а"(он есть в скриптах DATA+), может что и пригодится на первый случай.
0 голосов
ответил 01 Июнь, 11 от Dargin (2,080 баллов)
Для динамической связи между полями можно написать простой скрипт, который бы выполнял арифметические действия с цифровыми полями. Повесить его на кнопку и разместить на панели инструментов.

А готовых примеров нету... просто времени особо тоже уже нет?
    
0 голосов
ответил 02 Июнь, 11 от Lord (3,920 баллов)
Этот скрипт запускается динамически каждые 5 минут
Я думаю, это то что нужно. Ну и английский понимать чуть-чуть.
Finds the Avenue script called aScriptName and executes it after aDelay, in seconds. anObj becomes the object referenced by the SELF keyword in the called script (see av.run for more explanation). aDelay is a time in seconds and it must be an integer value.

DelayedRun allows you to create scripts that execute on intervals. The script includes a DelayedRun request on itself. For example, the following script - named SaveProject - causes ArcView to save the project every 5 minutes.

'SaveProject
av.GetProject.Save     'assumes project is already named
av.ShowMsg( "Project saved...")
av.DelayedRun( "SaveProject", nil, 300)
To stop this chain of execution, rename or delete SaveProject.

Это из хэлпа.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...