Получение ссылок из Excel

04.06.21

Интеграция - Загрузка и выгрузка в Excel

Гиперссылки в Excel недоступны при классическом чтении ТабличныйДокумент.Прочитать(). Их можно получить через COM соединение, но остаётся открытым вопрос - как это сделать, не используя внешние средства.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Получение ссылок из Excel:
.epf 7,50Kb
45 Скачать бесплатно

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Контекст

Из отчета по чекам ofd.ru нужно получать ссылки на сформированные чеки, но ссылки реализованы не в виде обычной строки, а в виде гиперссылки. Типовой механизм загрузки Excel файла через ТабличныйДокумент.Прочитать() такие ссылки не видит.

Было опробовано 2 варианта (оба рабочих):

1. Использование COM объекта. Метод в принципе рабочий, но очень низкая производительность.

2. Использование того факта, что xlsx по сути архив с xml документами.

Ограничения

Здесь не приводится законченное решение, только подход. У меня формат файла жёстко зафиксирован, поэтому универсальные решения не рассматривались.

Получение ссылок через распаковку архива

Общий принцип следующий - получаем файл ссылок "sheet1.xml.rels" - сохраняем из него соответствие идентификаторов ссылкам, а затем обрабатываем файл листа "sheet1.xml".

&НаСервере
Процедура ЗагрузитьДанныеЧековОФД(Адрес)
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
	ИмяВременногоКаталога = ПолучитьИмяВременногоФайла();
	Ссылки = Новый Соответствие;
	
	Попытка
		
		ДвоичныеДанные.Записать(ИмяВременногоФайла);
		
		ЧтениеАрхива = Новый ЧтениеZipФайла(ИмяВременногоФайла);
		ЭлементАрхиваДанные = ЧтениеАрхива.Элементы.Найти("sheet1.xml");
		ЭлементАрхиваСсылки = ЧтениеАрхива.Элементы.Найти("sheet1.xml.rels");
		
		ЧтениеАрхива.Извлечь(ЭлементАрхиваДанные, ИмяВременногоКаталога, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
		ЧтениеАрхива.Извлечь(ЭлементАрхиваСсылки, ИмяВременногоКаталога, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
		
		ЧтениеАрхива.Закрыть();
		
		ЧтениеXML = Новый ЧтениеXML;
		ЧтениеXML.ОткрытьФайл(ИмяВременногоКаталога + "/sheet1.xml.rels");
		ПостроительDOM = Новый ПостроительDOM;
		Документ = ПостроительDOM.Прочитать(ЧтениеXML);
		ЧтениеXML.Закрыть();
		
		Если Документ.ДочерниеУзлы.Количество() = 1 Тогда
		
			Для каждого ЭлементСсылки Из Документ.ДочерниеУзлы[0].ДочерниеУзлы Цикл
			
				Тип = ЭлементСсылки.ПолучитьАтрибут("Type");
				ИД = ЭлементСсылки.ПолучитьАтрибут("Id");
				ЗначениеСсылки = ЭлементСсылки.ПолучитьАтрибут("Target");
				
				Если Тип <> "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Тогда
					Продолжить;
				КонецЕсли;
				
				Ссылки.Вставить(ИД, ЗначениеСсылки);
			
			КонецЦикла; 
		
		КонецЕсли;
		
		ЧтениеXML = Новый ЧтениеXML;
		ЧтениеXML.ОткрытьФайл(ИмяВременногоКаталога + "/sheet1.xml");
		ПостроительDOM = Новый ПостроительDOM;
		Документ = ПостроительDOM.Прочитать(ЧтениеXML);
		ЧтениеXML.Закрыть();
		
		Если Документ.ДочерниеУзлы.Количество() = 1 Тогда
		
			УзелКниги =Документ.ДочерниеУзлы[0];
			
			Для каждого ЭлементЛиста Из УзелКниги.ДочерниеУзлы Цикл
			
				Если Тип(ЭлементЛиста) <> Тип("ЭлементDOM")
					Или ЭлементЛиста.ИмяУзла <> "hyperlinks" Тогда
				
					Продолжить;
				
				КонецЕсли;
				
				Для каждого ЭлементСсылки Из ЭлементЛиста.ДочерниеУзлы Цикл
				
					АдресЯчейки = ЭлементСсылки.ПолучитьАтрибут("ref");
					ИД = ЭлементСсылки.ПолучитьАтрибут("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "id");
					Ссылка = Ссылки[ИД];
					
					Если Ссылка <> Неопределено Тогда
					
						НоваяСтрокаСсылки = ТаблицаСсылок.Добавить();
						НоваяСтрокаСсылки.АдресЯчейки = АдресЯчейки;
						НоваяСтрокаСсылки.Ссылка = Ссылка;
					
					КонецЕсли; 
				
				КонецЦикла; 
			
			КонецЦикла; 
		
		КонецЕсли; 
		
	Исключение
		
	КонецПопытки;

	УдалитьФайлы(ИмяВременногоФайла);
	УдалитьФайлы(ИмяВременногоКаталога);

КонецПроцедуры

Платформа 8.3.14.

Вступайте в нашу телеграмм-группу Инфостарт

Excel Гиперссылки

См. также

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы преобразуете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, Детский мир, Магнит Маркет (быв.МагнитЭкспресс), Лемана про, ЭНФАНТА (Акушерство), ЛаМода, Летуаль, Твой дом, Золотое Яблоко, Каспи, Авито, Аптеки+ в документы "Отчет комиссионера (агента) о продажах" и другие. Работает в 1С:БП 3.0, 1С:БП 3.0 КОРП, 1С:УТ 11, 1С:УНФ, 1С:ERP.

5490 руб.

12.08.2021    45898    577    71    

218

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

12444 руб.

29.10.2014    232615    750    534    

498

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загружает данные из Акта приемки товара от ООО «Вайлдберриз», полученный из личного кабинета в формате *.xlsx или API в документ "Реализация (акты, накладные, УПД)" для конфигурации: Бухгалтерия предприятия, редакция 3.0, в документ "Реализация товаров и услуг" для Управление торговлей, редакция 11; Комплексная автоматизация 2; ERP 2 Управление предприятием и в документ "Расходная накладная" для Управление нашей фирмой 3.0; Розница 3.0

6100 руб.

24.01.2021    24890    122    0    

63

Загрузка и выгрузка в Excel Программист Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса Lamoda «Ламода» для конфигурации: 1С:Бухгалтерия предприятия, редакция 3.0; 1C:Управление торговлей, редакция 11 и 1C:Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

6100 руб.

01.03.2021    12513    71    0    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Jimbo 13 11.06.21 09:23 Сейчас в теме
Весьма оригинально и элегантно!
2. olejjon_123 11.06.21 10:08 Сейчас в теме
Согласен, как раз искал эту информацию
3. fotov 341 12.03.26 16:17 Сейчас в теме
Автор топ, у меня заработало с первого раза.
Для отправки сообщения требуется регистрация/авторизация