CftClub.ru
Клуб специалистов ЦФТ-Банк

Гиперссылка при выводе EXCEL-отчета через OOXML

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Blackmore64
Профи


Вступление в Клуб: 17.01.2017
СообщениеВт Апр 23, 2019 08:38   Гиперссылка при выводе EXCEL-отчета через OOXML Ответить с цитатой
Полезность: Нет оценки
Добрый день.
Создана операция по выводу групп доступа с доступными объектами:
- на первом листе - список групп
- на каждом последующем листе - доступные объекты одной из существующих групп доступа.
На первом листе есть колонка со ссылкой на лист с соответствующей группой.
Конструкция
Код:
&xl.hyperlink(cur_row, 3, '"#"&B' || cur_row || '&"!A1";">>>"', null, 1);
выводит подчеркнутые возрастающие числа (5, 137, 186 и т.д.), т.е. ссылка не получается. Плюс при формировании отчета выходит ощибка "В книге обнаружено содержимое, которое не удалось прочитать. попробовать восстановить содержимое?". Затем
"Была выполнена проверка на уровне файла с последующим восстановлением файла. Некоторые фрагменты документа могли быть восстановлены либо удалены.
Восстановленный компонент: Компонент /xl/worksheets/sheet1.xml.
Удаленное свойство: Гиперссылки из части /xl/worksheets/sheet1.xml".
Если переделать так
Код:
&xl.cell(cur_row, 3, ('=ГИПЕРССЫЛКА("#"&B' || cur_row || '&"!A1";">>>")'|| NL$));
то ссылка, например, на 2-й лист выводится так
=ГИПЕРССЫЛКА("#"&B2&"!A1";">>>")
И ссылка начинает работать только если в зайти ячейку по F2 и нажать Enter.
Примеров использования &xl.hyperlink в дистрибутиве не нашел.
Что не так делаем?
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеВт Апр 23, 2019 11:34    Ответить с цитатой
Полезность: Нет оценки
я бы попробовал сравнить sheet1 с корректным линком и sheet1 с некорректным линком
Blackmore64
Профи


Вступление в Клуб: 17.01.2017
СообщениеВт Апр 23, 2019 13:48    Ответить с цитатой
Полезность: Нет оценки
Пример сформированного файла с конструкцией
=ГИПЕРССЫЛКА("#"&B2&"!A1";">>>")
Ячейки C2 и C3 стали корректными после ручного F2 и нажатия Enter. Ячейку С4 не трогали.
Мне, правда, интересней чтоб заработало с &xl.hyperlink...
Blackmore64
Профи


Вступление в Клуб: 17.01.2017
СообщениеВт Апр 23, 2019 13:59    Ответить с цитатой
Полезность: Нет оценки
Или может есть способ, чтобы прямо в операции можно было запрограммировать нажатие F2 и Enter
Gobur
Профи


Вступление в Клуб: 06.11.2012
СообщениеВт Апр 23, 2019 16:18    Ответить с цитатой
Полезность: Нет оценки
Blackmore64 пишет:
Или может есть способ, чтобы прямо в операции можно было запрограммировать нажатие F2 и Enter

Не знаю как сейчас, но раньше в эксель программно в ячейку надо было писать английское название функции, т.е. не ГИПЕРССЫЛКА.
Иначе тоже начинало работать только после F2 и enter.
Blackmore64
Профи


Вступление в Клуб: 17.01.2017
СообщениеСр Апр 24, 2019 07:34    Ответить с цитатой
Полезность: Нет оценки
Gobur пишет:
раньше в эксель программно в ячейку надо было писать английское название функции, т.е. не ГИПЕРССЫЛКА.
Иначе тоже начинало работать только после F2 и enter.

Попробовал =HYPERLINK("#"&B2&"!A1";">>>") - почему-то вообще не работает. После нажатия F2 и Enter ошибка #ИМЯ?
kai
Профи


Вступление в Клуб: 16.08.2012
СообщениеПт Апр 26, 2019 13:19   [OOXML]::[API_XL].hyperlink Ответить с цитатой
Полезность: 1
Сейчас в [OOXML]::[API_XL].hyperlink реализовано создание ссылок для переходов по url наружу, а внутри файла нет. Чтобы было, нужно дорабатывать... по заявке.

Если везде понажимать F2 и Enter, то изменения такие
1. В файле xl\calcChain.xml добавились строки

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<calcChain xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
Код:
 <c i="4" l="1" r="D1"/>
 <c i="3" r="D1"/>
 <c i="1" r="C4"/>
 <c r="C3" i="1"/>

<c r="D1" i="2"/>
<c r="C2" i="1"/>
</calcChain>


2. В xl\sharedStrings.xml исчезло
=ГИПЕРССЫЛКА("#Оглавление!A1";"Назад в оглавление")
=ГИПЕРССЫЛКА("#"&B4&"!A1";">>>")

В xl\worksheets\sheet1.xml вместо
Код:
   <c r="C4" t="s">
    <v>
     12
    </v>
   </c>


стало

Код:
   <c s="2" r="C4" t="str">
    <f>
     HYPERLINK("#"&B4&"!A1",">>>")
    </f>
    <v>
     >>>
    </v>
   </c>



3. В xl\worksheets\sheet3.xml и в xl\worksheets\sheet4.xml вместо
Код:
   <c r="D1" t="s">
    <v>
     3
    </v>
   </c>


стало

Код:
   <c s="2" r="D1" t="str">
    <f>
     HYPERLINK("#Оглавление!A1","Назад в оглавление")
    </f>
    <v>
     Назад в оглавление
    </v>
   </c>
Blackmore64
Профи


Вступление в Клуб: 17.01.2017
СообщениеПн Апр 29, 2019 07:14   Re: [OOXML]::[API_XL].hyperlink Ответить с цитатой
Полезность: Нет оценки
kai пишет:
Сейчас в [OOXML]::[API_XL].hyperlink реализовано создание ссылок для переходов по url наружу, а внутри файла нет. Чтобы было, нужно дорабатывать... по заявке.

Понятно, жаль)
Быстрый способ сделать все ссылки работающими в самом Excel - Найти и заменить (Ctrl+H) знак равенства на него же во всей книге
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru