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

04.06.21

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

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

Скачать файл

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

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

Контекст

Из отчета по чекам 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 Гиперссылки

См. также

SALE! 20%

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

Универсальная обработка для загрузки документов из Excel в 1С. Забудьте о ручном вводе: загружайте документы из Excel в 1С за секунды! Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С.

6000 5100 руб.

09.11.2016    237701    1076    904    

1012

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 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С:КА 2, 1С:ERP Управление предприятием. Возможность подключить любые маркетплейсы. Анализ продаж ОZON. 30 дней БЕСПЛАТНОГО пользования!

3600 руб.

12.08.2021    36434    368    68    

160

SALE! 30%

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

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    108285    315    173    

327

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

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

11100 руб.

29.10.2014    217489    662    527    

457

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

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

4800 руб.

23.01.2022    11402    56    0    

38

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 09.12.2024, версия 9.8 - 9.13)

16800 руб.

20.11.2015    157283    379    378    

514
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Jimbo 11 11.06.21 09:23 Сейчас в теме
Весьма оригинально и элегантно!
2. olejjon_123 11.06.21 10:08 Сейчас в теме
Согласен, как раз искал эту информацию
Оставьте свое сообщение