Страницы: 1
RSS
Гиперссылка на раздел pdf файла (или страницу)
 
Есть перечень контрактов в разных папках в PDF
список с полными путями до них уже нашел
сделал список гиперссылками через формулу Гиперссылка (путь;название)
теперь хочу следующий шаг: в контрактах есть определенные условия, например - сроки или риски.
Находятся на разных страницах.
Можно ли заставить открывать сразу на странице?
в html работает следующая запись
Наша пдфка страница 3
По этой ссылке пдф открывается в эксплоере на третьей странице.
В эксель - открывается акробат - на первой странице.
 
не получилось с гиперссылкой, вот она:
Наша пдфка
 
сайт превращает ее в ссылку. в общем - так: Проба.pdf#page=3
Взял отсюда:
http://www.ithowto.ru/446-kak-sdelat-ssylku-na-pdf-v-html.html
Но в экселе не получается
 
так до сих пор и нет решения? Возникла та же проблема: в локальной сети есть файл пдф, состоящий из 70 страниц. Вставлял в ячейки гиперссылки таким же образом "Проба.pdf#page=3" - файл открывается на первой странице. Дербанить файл пдф на страницы не вариант, т.к. он регулярно редактируется.
 
тымс не пробовали?
Изменено: ber$erk - 22.07.2014 12:01:44
Учимся сами и помогаем другим...
 
пробовал, там бред написан. Действительно теоретик. Либо я недопонял. У закладок в пдф файле не могу найти какой-либо адресации, то есть притянуть не за что. Вот в этом файле правила открытия пдф, но они работают только через браузер, как я понял.
 
в приципе там написано, что макросом можно реализовать открытие файла на нужной странице через shell
Учимся сами и помогаем другим...
 
ставите кнопку на лист. на нее пишете макрос с одной строкой:

Код
Shell "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe /A ""page=4"" ""полный путь к файлу\файл.pdf""", vbMaximizedFocus
 
и все
Учимся сами и помогаем другим...
 
как вариант, без кнопок:
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' Cell (in specified column) value used as page number for specified pdf
If Intersect(Target, Range("K:K")) Is Nothing Then Exit Sub ' specify range with page links
Dim ans As Integer, ChromeLink As String, ARlink As String
ans = MsgBox("Open in Acrobat Reader (Yes) or in Chrome? (No)", vbQuestion + vbYesNoCancel)
Select Case ans
Case 6
    ARlink = """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe""" & " /A " _
            & """page=" & Target.Value & "" & " ""D:\tt.pdf"""
    Shell (ARlink)
Case 7
    ChromeLink = "file:///D:/tt.pdf#page=" & Target.Value ' (specify PDF and add cell value as page number)
    Shell (Environ("LOCALAPPDATA") & "\Google\Chrome\Application\chrome.exe --new-window " & ChromeLink) 
Case Else: Exit Sub
End Select
    Cancel = True
End Sub
Изменено: Максим Зеленский - 22.07.2014 14:45:24
F1 творит чудеса
 
акробат запускается и тут же вылетает, что по кнопке, что по двойному щелчку. Да и код этот только для одного компьютера. У сетевых пользователей могут быть разные просмотровщики и браузеры. Гиперссылка работает, но выдает только первую страницу.
 
у меня все прекрасно открывается. видимо проблема на Вашей стороне. Вы путь к акробату меняли?
Учимся сами и помогаем другим...
 
Цитата
antonomeshalka пишет:
Гиперссылка работает, но выдает только первую страницу.
Значит, всем пользователям надо поставить один и тот же браузер. Копайте насчет Internet Explorer Automation из Экселя, там можно без всякого shell запускать и передавать URL/
Не знаю, почему вылетает. У меня ничего не вылетает. Вылизывал этот код долго, всё работает.
А, понял. Намекаю, вот это не зря записано именно так:
Код
Case 6    ARlink = """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe""" & " /A " _      & """page=" & Target.Value & "" & " ""D:\tt.pdf"""    Shell (ARlink) 
В #6 вы сами привели нотацию командной строки, и тут же на нее забили.
И проверьте, у вас юзер Иженер или Инженер всё же.
F1 творит чудеса
 
заработало! спасибо, уважаемые ber$erk и Максим. Проблема была в пути запуска акробата,  у меня он выглядит так "C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe".
Но на этой почве возник другой вопрос: у сетевых пользователей могут быть разные читалки пдф и пути установки к ним. Возможно ли, чтобы файл открывался ассоциированной с ним программой?
 
Пожалуйста! )
видимо придется лезть в реестр и искать ассоциированную программу с pdf-файлами. проблема в том, что мы пока не знаем, позволяет ли открыть напр. Foxit reader файл на определенной странице. в любом случае лучше взять за основу код Максима Зеленского и править его.
Самое простое, ИМХО, смотреть, что установлено на компе пользователя. И если нет ни акробата, ни хрома, то ругаться и не открывать ничего )
Изменено: ber$erk - 23.07.2014 09:06:08
Учимся сами и помогаем другим...
 
Цитата
antonomeshalka пишет:
Возможно ли, чтобы файл открывался ассоциированной с ним программой?
у меня пока не получилось
F1 творит чудеса
 
Доброе время суток
Если Adobe Reader установлен, то можно так
Код
    Dim pShell As Object
    Set pShell = CreateObject("WScript.Shell")
    pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=3 " & """d:\path\filename.pdf"""

Просто ассоциированным приложением
Код
    pShell.Run """d:\path\filename.pdf"""

Успехов.
 
Вот так, наверное, будет работать практически у всех после допиливания под Worksheet_BeforeDoubleClick (обычно Internet Explorer не сносят, а просто не пользуют):
Код
Sub GOTO_PAGE()
Dim FilePath$, Page$, PNum%, IE$
IE = Environ("PROGRAMFILES") & "\Internet Explorer\iexplore.exe "
PNum = 3
FilePath = "D:\tt.pdf" ' путь к файлу
Page = "#page=" & PNum ' ссылка на страницу (или на переделать на закладку по нотации Acrobat)
On Error Resume Next
    If Shell(IE & FilePath & Page, vbNormalFocus) = 0 Then _
    Shell ("cmd /C " & FilePath) ' открываем в программе по умолчанию с 1 страницы
On Error GoTo 0
End Sub
Единственное, что надо добавить - закрытие окна интерпретатора. У меня никак не удается передать строку типа
"cmd /c d:\tt.pdf"&&"exit"
через Shell, ругается.
F1 творит чудеса
 
Цитата
anvg пишет: pShell.Run pShell.RegRead
во, так тогда, если нет Акробата, можно так получить и браузер по умолчанию и передать в него нужную ссылку с номером страницы. Осталось только найти ключ подходящий  :)
F1 творит чудеса
 
http://excel.tips.net/T003350_Linking_to_a_Specific_Page_in_a_PDF_File.html

Ещё не успел проверить - машна распознаёт 700 страничный PDF документ. Но после - обязательно попробую.
Код
Sub OpenPDFpage()    Dim myLink As String
    Dim TargetPage As Double
    Dim objIE As New InternetExplorer

    myLink = "path/filename.pdf"
    TargetPage = 7   'Page number to be shown

    With objIE
        .Navigate myLink & "#page=" & TargetPage
        .Visible = True
    End With
End Sub
Изменено: SanShiney - 14.04.2016 09:02:41
 
anvg, как найти путь к екзешнику в реестре, если хочу открыть документ в Фоксит например?
И как правильно прописать чтобы ассоциированным приложением открывало на нужной странице?  
 
Цитата
yuiop2017 написал:
хочу открыть документ в Фоксит
а поисковики в интернете сломались, или у вас пожизненный бан? Foxit.
успехов.
 
Спасибо вышенаписавшим, собрал себе такой:

Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Intersect(Target, Range("L:L")) Is Nothing Then Exit Sub
    Dim pShell As Object
    Set pShell = CreateObject("WScript.Shell")
    pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=" & Target.Value & " " & """C:\123.pdf"""
    Cancel = True
    
End Sub


Работает по двойному клику в столбце L.
 
Доброго времени суток. Подскажите пожалуйста, как преобразовать код выше для того, чтобы создать ссылки на разные страницы разных pdf-докуементов с кликом в разных местах на одном листе excel.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

   If Intersect(Target, Range("L:L")) Is Nothing Then Exit Sub
   Dim pShell As Object
   Set pShell = CreateObject("WScript.Shell")
   pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=" & Target.Value & " " & """C:\123.pdf"""
   Cancel = True
   
End Sub

UPD: два дня копался, не мог разобраться, а как только написал сюда сообщение, то допёрло, magic!  
Не ругайтесь, я только на прошлой неделе узнал о макросах.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim pShell As Object
Set pShell = CreateObject("WScript.Shell")
If Not Intersect(Target, Range("K:K")) Is Nothing Then
       
       pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=12" & Target.Value & " " & """E:\документ 1.pdf"""
   Cancel = True
ElseIf Not Intersect(Target, Range("J:J")) Is Nothing Then
   pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=24" & Target.Value & " " & """E:\ документ 2.pdf"""
   Cancel = True
   Else: Exit Sub
End If
End Sub

 
Изменено: IKrosh - 22.08.2023 09:34:28
Страницы: 1
Наверх