1с табличный документ гиперссылка в ячейке excel

   Dolphinbet

27.07.16 — 17:02

Добавляю в отчет в экселе гиперссылки с помощью следующего кода:

excel = Новый COMОбъект(«Excel.Application»);

Книга = excel.WorkBooks.Open(ПутьКФайлуотчета);

List = Книга.Sheets(1);

ВсегоСтрок = List.Cells(1,1).SpecialCells(11).Row;

Для i=1 по ВсегоСтрок цикл

Hyperlink = «…»;

List.Hyperlinks.Add(List.Cells(i,5), Hyperlink, , , СокрЛП(List.Cells(i,5).Text));

КонецЦикла;

Все работает, но при большом количестве строк процесс занимает много времени, хотелось бы его ускорить, кто-нибудь может предложить более быстрый вариант?

   В тылу врага

1 — 27.07.16 — 17:05

у нас так:

Ячейка = Лист.Cells(Строка, й0);

Ячейка.Hyperlinks.Add(Ячейка, ГиперСсылка);

   Dolphinbet

2 — 27.07.16 — 17:07

(1) ну это тоже самое)

   Dolphinbet

3 — 27.07.16 — 17:12

Хотелось бы посмотреть на вариант работы с Excel через ADODB… как через него вставить гиперссылки?

   Dolphinbet

4 — 27.07.16 — 17:51

Есть вообще какие-нибудь хорошие библиотеки для работы с файлами в формате xlsx помимо COMОбъект(«Excel.Application»), который использовать вроде как не рекомендует Майкрософт?

   Tatitutu

5 — 27.07.16 — 18:03

Запиши макрос средствами EXCEL в личную книгу макросов и вызывай макрос из 1С (если задача локальная то в разы быстрее)

   b_ru

6 — 27.07.16 — 19:32

>>Все работает, но при большом количестве строк процесс занимает много времени, хотелось бы его ускорить, кто-нибудь может предложить более быстрый вариант?

Сформируй табличный документ с гиперссылками, сохрани в xlsx

>>помимо COMОбъект(«Excel.Application»), который использовать вроде как не рекомендует Майкрософт?

наркоман штоле©

>>если задача локальная то в разы быстрее

и ты наркоман

Еще я у тебя в коде Application.ScreenUpdating = Ложь

не вижу

   MaxS

7 — 27.07.16 — 19:43

Средствами 1С записать xlsx, вместо гиперссылки какое-нибудь значение.

Распаковать файл и поменять текст на гиперссылки, запаковать обратно.

Предварительно сделать пример файла с гипер сылкой, чтобы было понятно что писать в xml.

Сам так не делал, предположил просто. ))

   romix

8 — 27.07.16 — 21:46

Невидимость там включить…

   Dolphinbet

9 — 28.07.16 — 10:03

(6)Сформируй табличный документ с гиперссылками, сохрани в xlsx

Не очень понял, как в табличный документ 1С можно вставить гиперссылки?..

Application.ScreenUpdating = Ложь

Это зачем?

   Dolphinbet

10 — 28.07.16 — 10:07

(7) да, чисто теоретически можно распаковать файл xlsx и работать с xml файлами. Однако трудоемкость данной задачи приличная)

   Dolphinbet

11 — 28.07.16 — 10:16

(6)>>помимо COMОбъект(«Excel.Application»), который использовать вроде как не рекомендует Майкрософт?

наркоман штоле©

https://support.microsoft.com/ru-ru/kb/257757

Корпорация Microsoft не советует производить и не поддерживает серверной автоматизации Office.

   Dolphinbet

12 — 28.07.16 — 10:17

Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.

   b_ru

13 — 28.07.16 — 13:21

(9) Application.ScreenUpdating = Ложь  отключает обновление экрана Excel и ускоряет его работу.

(11) Ты это &НаСервере запускаешь?

  

Dolphinbet

14 — 28.07.16 — 15:42

(13) да, на сервере (в фоновом задании формируются отчеты, сохраняются в эксель и обрабатываются определенным образом). Так на экране и так ничего не отображается…

Автор Сарычев Владислав, 21 мая 2019, 13:04

0 Пользователей и 1 гость просматривают эту тему.

Выгружаю из Эксель-файла в 1С данные. В файле есть гиперссылка (путь к файлу). Нашел через отладчик , в каком реквизите (Эксель.ActiveSheet.Cells(Строка,Колонка).Hyperlinks[0].Addres) находится путь, но программно не могу его вытащить. Как программно обратиться к Эксель.ActiveSheet.Cells(Строка,Колонка).Hyperlinks[0].Addres?



Работаю в 1С:Предприятие 8.3 (8.3.11.3034)
&НаКлиенте
Процедура Прочитать(Команда)

      Если ИмяФайла = «» Тогда
      Сообщить(«Файл не выбран» + ОписаниеОшибки());
      Возврат;
   КонецЕсли;

      Попытка
      Эксель = Новый COMОбъект(«Excel.Application»);
   Исключение
      Сообщить(ОписаниеОшибки());
      Возврат;
   КонецПопытки;   
   Книга = Эксель.WorkBooks.Open(ИмяФайла);   
   Лист = Книга.WorkSheets(1);       
   КоличествоЛистов = Книга.Sheets.Count;
   ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
   ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
   Для Строка = 1 По ВсегоСтрок Цикл   
      Для Колонка = 1 По ВсегоКолонок Цикл
         Гиперссылка = СокрЛП(Эксель.ActiveSheet.Cells(Строка,Колонка).Hyperlinks);   
         ОбработкаПрерыванияПользователя();         
      КонецЦикла;       
   КонецЦикла;
   Эксель.Application.Quit();
КонецПроцедуры


(0) что ЗНАЧИТ: «программно его вытащить».??

Вы же пишете: Гиперссылка = СокрЛП(Эксель.ActiveSheet.Cells(Строка,Колонка).Hyperlinks); 

а НЕ: Гиперссылка = СокрЛП(Эксель.ActiveSheet.Cells(Строка,Колонка).Hyperlinks[0].Addres);

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают


при попытке написать
Гиперссылка = СокрЛП(Эксель.ActiveSheet.Cells(Строка,Колонка).Hyperlinks[0].Addres);
выдает ошибку

Суть моей просьбы: Мне нужна гиперссылка (путь к файлу), то бишь его значение.


Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают


:)
Выдает ошибку «Получение элемента по индексу для значения не определено»


Попробуйте вместо Hyperlinks[0] написать
Hyperlinks.Item(0)


{ВнешняяОбработка.РаботаcEXEl.Форма.Форма.Форма(23)}: Ошибка при вызове метода контекста (Hyperlinks)
         Значение1 = СокрЛП(Эксель.ActiveSheet.Cells(Строка,Колонка).Hyperlinks(0));   
по причине:
Произошла исключительная ситуация (0x8002000b)



  1. Здравтсвуйте!
    надо сохранить табличный документ в excel и передать туда ссылку

    ТабДок.Записать(СокрЛП(ФайлВыгрузки),"XLS"); 
    Ексель = Новый COMОбъект("Excel.Application");
    Прайс = Ексель.Workbooks.Open(ФайлВыгрузки);
    Ячейка = Прайс.Sheets(1).Cells(5,7);
    Прайс.Sheets(1).Hyperlinks.Add(Ячейка,"http://rambler.ru";,,);
    
    

    гиперссылка работает очень странно… то есть , нужно несколько раз нажать на нее чтобы активизировать.
    и как задать отображаемое имя???

    спасибо

    Используйте тэг


  2. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Вас интересует ScreenTip и TextToDisplay


  3. Извините, действительно новичок …
    знаю что нужно ScreenTip и TextToDisplay, но не знаю как из 1с это сделать.

    Прайс.Sheets(1).Hyperlinks.Add(Ячейка,"http://rambler.ru","","Microsoft Web Site", "Текст...");
    
    

    не работает

  4. Прайс.Sheets(1).Hyperlinks.Add(Ячейка,"http://rambler.ru","","Microsoft Web Site","Подробно...");
    
    

    Не работает!!!!
    отображается Подробно… , но как киперссылка не срабатывает!!!
    помогите, плиз!!!!!!!!!!!


  5. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    У меня вот так работает нормально:

    ТаблицаExcel = Новый COMОбъект("Excel.Application");
    КнигаExcel = ТаблицаExcel.Workbooks.Add();
    СтраницаExcel = КнигаExcel.Worksheets(1);
    СтраницаExcel.Cells(1, 1).Hyperlinks.Add(СтраницаExcel.Cells(1, 1), "http://www.mail.ru",, "Ссылка", "Ссылка на мэйлру" );
    
  6. При создании нового ссылка работает, а вот при открытии и изменении нет((((

  7. Ексель = ПолучитьCOMОбъект(ФайлВыгрузки);
    
    

    ошибка — Ошибка получения объекта COM: Класс не зарегистрирован


  8. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Не догнал…ФайлВыгрузки — это что такое и чему равно?

  9. ТабДок.Записать("D:выгрузка.xls","XLS");
    Ексель =  Новый COMОбъект("Excel.Application");
    Книга = Ексель.Workbooks.Open("D:выгрузка.xls");
    Страница = Книга.WorkSheets(1);
    Страница.Hyperlinks.Add(Страница.Cells(5,7),"http://rambler.ru",,"Ссылка", "Рамблер...");
    Книга.Save();
    Книга.Close();
    Ексель.Quit();
    
    

    Не работает….
    при создании нового документа ексель работает. а при открытии сохраненного документа, куда надо добавить ссылку нет

  10. Спасибо большое!!!
    все заработало!!! моей радости нет предела..


  11. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Сейчас глянем…

    PS. Пока писал, уже до меня посмотрели :)


  12. sdemon72

    Offline

    sdemon72

    Регистрация:
    12 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1

    Так а как сделать то? У меня те же грабли. Пробовал так:

    Екс.ActiveSheet.Cells(ТекСтрокаЕкс, 3).Hyperlinks.Add(Екс.ActiveSheet.Cells(ТекСтрокаЕкс, 3), ТекАдресКартинки);
    

    и так

    Екс.ActiveSheet.Hyperlinks.Add(Екс.ActiveSheet.Cells(ТекСтрокаЕкс, 3), ТекАдресКартинки);
    

    и так

    Екс.ActiveSheet.Hyperlinks.Add(Екс.ActiveSheet.Cells(ТекСтрокаЕкс, 3), ТекАдресКартинки,"","Ссылка","Текст");
    

    В экселе открываешь — выглядит как ссылка, но не ведет себя как ссылка. Причем если при открытом документе еще раз запускаю обработку — оно видно как перерисовавает ячейки, и ссылки становятся рабочими. Где чего добавить?


  13. sdemon72

    Offline

    sdemon72

    Регистрация:
    12 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1

    Ага, просек тему.
    Дело в том, что, поленившись создавать шапку програмным путем, я сохранял объект 1с «Таблица» в формат XLS, затем открывал его (Екс.workbooks.Open(ИмяФайлаПрайса)) и забивал туда строки. При сохранении полученного документа он сохранялся как Excel95, и поэтому ссылки не сохранялись (видимо не поддерживаются).
    Переделал программу, чтобы документ XLS создавался «с нуля» — теперь все тип-топ :unsure:


  14. alp

    Offline

    alp
    Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    434
    Симпатии:
    0
    Баллы:
    26

    У меня Проблема как сделать ссылку на себя, тоесть на другую ячейку ??

    Ячейка= Данные.Sheets(1).Cells(3,1);
    Данные.Sheets(1).Hyperlinks.Add(Ячейка,Данные.sheets(1).Range("A160"));
    
    

    не работает , почему не понимаю.


  15. alp

    Offline

    alp
    Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    434
    Симпатии:
    0
    Баллы:
    26

    Можно ли получить адрес из уже существующей гиперссылки ?


  16. myr4ik07

    Offline

    myr4ik07

    Регистрация:
    10 авг 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1

    А ссылку поставить на изображение как?


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

1

1C 8.x

Гиперссылка на ячейку в макете

29.01.2016, 16:28. Показов 13554. Ответов 9


Студворк — интернет-сервис помощи студентам

Можете показать пример как в макете нажимая на ячейку с текстом (имеет гиперссылку ) чтобы открывался файл «Файл.dot».



0



Yanush

162 / 158 / 62

Регистрация: 28.09.2013

Сообщений: 293

29.01.2016, 17:43

2

Есть такие вещи:
НачатьЗапускПриложения
ЗапуститьПриложение

Вот пример:

ТабДок на форму.

1C
1
2
3
4
5
6
&НаКлиенте
Процедура ТабДокВыбор(Элемент, Область, СтандартнаяОбработка)
    если Область.Гиперссылка тогда
        ЗапуститьПриложение("C:\Test.txt");
    конецесли;
КонецПроцедуры



0



Ermak27

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

01.02.2016, 09:40

 [ТС]

3

Yanush, что то не получилось у меня, может что то не так объяснил. Вот код открытия макета

1C
1
2
3
4
5
6
7
8
9
10
11
12
ТабДок = Новый ТабличныйДокумент ;
    Мекет = ПолучитьМакет("УстановкаПриборов");
    Область = Мекет.ПолучитьОбласть("Строка"); 
    ТабДок.Вывести(Область);
    ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
    ТабДок.АвтоМасштаб=Истина;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь; 
    ТабДок.ПовторятьПриПечатиСтроки=ТабДок.Область("R4:R5");
    ТабДок.Показать();

В макете есть текст, на одну из ячейки я поставил гиперссылку, при нажатии на эту ячейку должен открываться документ «Файл.dot».



0



162 / 158 / 62

Регистрация: 28.09.2013

Сообщений: 293

01.02.2016, 16:51

4

Создай реквизит формы тип ТабличныйДокумент и перекинь его на форму. Все то, что ты сформировал выведи в него. А дальше у табличного документа определи событие Выбор. В него передается ячейка (или область), на которую ты нажимаешь (то, что выше постом).



0



4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

01.02.2016, 17:11

 [ТС]

5

Yanush, создать реквизит в макете или где? Я же про макет говорю



0



162 / 158 / 62

Регистрация: 28.09.2013

Сообщений: 293

01.02.2016, 19:40

6

Может так понятней будет.

Миниатюры

Гиперссылка на ячейку в макете
 



0



4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

02.02.2016, 08:50

 [ТС]

7

Yanush, Создал реквизит ТабДок, создал форму. Реквизит имеет свойство Поле выбора. События Выбора нет, только НачалоВыбора и НачалоВыбораИзСписка.

Цитата
Сообщение от Yanush
Посмотреть сообщение

В него передается ячейка (или область), на которую ты нажимаешь (то, что выше постом).

Как передать?



0



162 / 158 / 62

Регистрация: 28.09.2013

Сообщений: 293

02.02.2016, 11:04

8

Внутри архива пример

Вложения

Тип файла: rar ar.rar (4.3 Кб, 30 просмотров)



1



4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

02.02.2016, 13:30

 [ТС]

9

Yanush, у меня управляемая обработка не открывается.



0



Yanush

162 / 158 / 62

Регистрация: 28.09.2013

Сообщений: 293

02.02.2016, 16:57

10

А я понял. Тогда по-другому:
Кидаешь на форму поле табличного документа. В своем коде не создаешь ТабличныйДокумент а все выводы делаешь прямо в поле табличного документа.
Например:

1C
1
ЭтаФорма.ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(...);

Ну а у поля табличного документа есть событие Выбор. И в параметре Область будет та ячейка (или область) на которую произведено нажатие.

1C
1
2
3
4
5
Процедура ПолеТабличногоДокумента1Выбор(Элемент, Область, СтандартнаяОбработка)
    если Область.Гиперссылка тогда
        ЗапуститьПриложение("C:\Test.txt");
    конецесли;
КонецПроцедуры



1



Skip to content

1С, вставить ссылку в табличный документ (макет печатной формы)

Вставить ссылку в табличный документ (макет печатной формы)

Порядок действий:

  • Создать макет, добавить параметр. В свойствах параметра задать наименование реквизита «ПараметрРасшифровки»;

  • Создать процедуру печати, где заполним свойство «ПараметрРасшифровки», пример процедуры:

Обратите внимание, что в свойствах табличного документа «ТабДок.ТолькоПросмотр = Истина»

&НаСервере
Процедура ПечатьНаСервере()
	ТабДок = Новый ТабличныйДокумент;
	Макет = Обработки.ВставитьСсылкуВТабличныйДокумент.ПолучитьМакет("Макет");
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЗаказПокупателя.Ссылка КАК Ссылка,
	|	ЗаказПокупателя.Представление КАК Представление
	|ИЗ
	|	Документ.ЗаказПокупателя КАК ЗаказПокупателя";
	Выборка = Запрос.Выполнить().Выбрать();
	ОбластьМакета = Макет.ПолучитьОбласть("Детали");
	
	Пока Выборка.Следующий() Цикл
		ОбластьМакета.Параметры.Представление = Выборка.Представление;
		ОбластьМакета.Параметры.Ссылка = Выборка.Ссылка; 
		ТабДок.Вывести(ОбластьМакета, Выборка.Уровень());
	КонецЦикла;
	
	ТабДок.ТолькоПросмотр = Истина; 
	ТабДок.Показать();
КонецПроцедуры

Связанные статьи

Like this post? Please share to your friends:
  • 1с способы чтения excel
  • 1с сохранить табличный документ в excel программно на сервере
  • 1с сохранить табличный документ в excel программно на разные листы
  • 1с сохранить табличные документы в разные листы excel
  • 1с сохранить таблицу значений в файл excel программно