Многие разработчики сталкиваются с тем, что при программном сохранении табличного документа 1С в формат XLS (Excel) установленные гиперссылки пропадают или превращаются в обычный текст. Рассмотрим, почему это происходит и как мы можем решить эту задачу с помощью программных инструментов.
Формат MXL, используемый в 1С, является проприетарным и при сохранении в XLS через штатную команду «Сохранить как» 1С ориентируется прежде всего на визуальное отображение данных. Атрибуты объектов, такие как гиперссылки, при такой конвертации часто теряются, так как движок 1С не переносит метаданные ссылок в структуру Excel автоматически.
Самый надежный способ обеспечить наличие «настоящих» гиперссылок в готовом файле — это использование COM-соединения с Excel. После того как вы сформировали файл, мы можем подключиться к нему из 1С и программно проставить ссылки в нужные ячейки.
Разберем этот процесс по шагам:
XLS стандартными методами 1С.COM-объект для работы с приложением Excel.Hyperlinks.Add для формирования ссылки.Посмотрим на пример кода для реализации этой задачи:
// Предположим, мы открыли книгу через COM:
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Open("путь_к_файлу.xls");
Лист = Книга.Worksheets(1);
// Цикл по строкам и колонкам для простановки ссылок
Для СчРядов = 1 По КоличествоСтрок Цикл
Для СчКолонок = 1 По КоличествоКолонок Цикл
// Формируем адрес диапазона ячейки
АдресЯчейки = НазваниеКолонки(СчКолонок) + Формат(СчРядов, "ЧГ=0");
// Зн1С — это значение, которое будет гиперссылкой
Зн1С = Лист.Range(АдресЯчейки).Value;
// Добавляем гиперссылку средствами Excel
Лист.Hyperlinks.Add(Лист.Range(АдресЯчейки), Зн1С);
// Присваиваем текст отображения
Лист.Cells(СчРядов, СчКолонок).Value = "Перейти по ссылке";
КонецЦикла;
КонецЦикла;
Книга.Save();
Excel.Quit();
Если вы не хотите использовать COM-объект или если объем данных слишком велик, можно воспользоваться особенностью современных версий Excel (2010 и выше). Программа умеет самостоятельно распознавать текстовые значения, начинающиеся с http:// или https://.
Суть метода:
XLSX (в формате XLS этот механизм работает хуже).Excel автоматически просканирует ячейки. Если в них содержится валидная ссылка, он подсветит их синим цветом и сделает кликабельными.Иногда целесообразнее пересмотреть подход к обмену данными с клиентами. Если прайс-лист не требует обязательного редактирования в Excel, мы можем предложить более надежные альтернативы:
Excel.Мы проанализировали ситуацию и выяснили, что штатная выгрузка MXL не поддерживает перенос гиперссылок. Если заказчик требует именно Excel, мы рекомендуем использовать COM-соединение для точной настройки ссылок или ограничиться вставкой полных URL-адресов, которые Excel распознает автоматически. Выбор метода зависит от того, насколько критично для клиента автоматическое создание кликабельных объектов при открытии файла.