Препарирование xlsx файлов без MS Excel

28.08.17

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

Зоопарк офисных программ? WPS Office, MS Office, Open Office? В статье пойдет речь о том, как отредактировать XLSX файлы без создания COM-объектов.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Пример подстановки ссылок
.epf 10,21Kb
18
18 Скачать (1 SM) Купить за 1 850 руб.

Вступление

Маркетологи любят заморачиваться по-поводу красивых рекламных материалов. А еще они любят заморачитьвася по поводу красивого прайса! Не просто с картиночками, а с ссылочками на сайт. Чтобы сделать *ТЫК* и открылась страничка товара.
Но как мы хорошо знаем такую штуку средствами 1С не сделать. Никак не хочет 1С выгружать рабочие гиперссылки в документы в формате *.xlsx. Для редактирования *.xlsx можно воспользоваться различными офисными пакетами и  API, которые они рпедлагают.

Наверняка все мы писали нечто вроде:

ДокументЭксель = Новый COMОбъект("Excel.Application");

У нас в фирме сложилась ситуация, что у части сотрудников стоит бесплатный офисный пакет Open Office, WPS Office, а у части стоит всем хорошо известный MS Office.
Писать свои процедуры для каждого из этих зверей ой как не хочется, правда ведь? 
Если вы ответили утвердительно, то описания выхода из ситуации чуток ниже =)

Цель

Имеется файл XLSX.
В нем есть столбец(текстовый) с ссылками на сайт.
Нужно заменить текст ссылкой. Ссылки должны отображаться как "Подробнее".

Общее описание формата XLSX

Приведем описание фаилов, которые нужны нам для решения поставленной задачи.

Файлы формата XLSX представляют из себя набор XML, упакованных в ZIP-архив.

Разобрать такой файлик можно нехитрым способом:

ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = "Открытие";
		
Если ДиалогВыбора.Выбрать() Тогда
	Путь = ДиалогВыбора.ПолноеИмяФайла;
	Идентификатор = Строка(Новый УникальныйИдентификатор);
	Зип = Новый ЧтениеZipФайла;
	Зип.Открыть(ДиалогВыбора.ПолноеИмяФайла);
	Зип.ИзвлечьВсе(КаталогВременныхФайлов()+"Price\"+Строка(Новый УникальныйИдентификатор), РежимВосстановленияПутейФайловZIP.Восстанавливать);
КонецЕсли;

Общее описание содержиться в файлике workbook.xml.

Файл SharedStrings.xml содержит в себе значение всех текстовых ячеек файла. На него установлены ссылки из файлов sheet.xml (описание листов).

В папке workshhets содеражться описание непосредственно листов нашей эксельки.
В корне папки worksheets лежат файлы, описывающие листы.

В папке _rels, лежит файл, описывающий ссылки, которые нам нужны.

Более полную информацию можно найти по адресу: тыц.

Файл /xl/worksheets/sheet.xml

В файле содержиться как описание форматирования, так и данных.

Данные содержаться в теге <sheetData>. И указываются они построчно.

Например вот так:

<row r="8" ht="29" customHeight="true">
	<c r="A8" s="2" t="e"/>
	<c r="B8" s="3" t="s">
		<v>0</v>
	</c>
	<c r="C8" s="3" t="s">
		<v>1</v>
	</c>
	<c r="D8" s="3" t="e"/>
</row>


Тег <с> содержит следующие атрибуты:

r - код ячейки
t - тип значения в ячейке

Тег <v> - значение ячейки

Если t="s", тогда <v> - индекс записи в файле SharedString.xml.

Ссылки в файле sheet.xml описывают отдельным тегом <hyperlinks>.

</hyperlinks>
	<hyperlink ref="M1" r:id="rId3"/>
	<hyperlink ref="M2" r:id="rId4"/>
	<hyperlink ref="M3" r:id="rId5"/>
	<hyperlink ref="M4" r:id="rId6"/>
</hyperlinks>

ref - это код ячейки
id - идентификтор ссылки, указанной в файле xl\worksheets/_rels/sheet1.xml

Обратите особоое внимание на указание пространства имен r (xmlns:r="http://schemas.openxmlformats.org/package/2006/relationships"). Его указывать обязательно.

Также ВАЖНО соблюдать порядок тегов. Тег <hyperlinks> должен стоять выше, чем тег <pageMargins>. 

Файл /xl/worksheets/_rels/sheet1.xml

В нем все предельное все ясно и понятно. Приведм пример:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">   
   <Relationship TargetMode="External" Target="//infostart.ru/public/225624/" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Id="rId1"/>
</Relationships>

Файл /xl/sharedStrings.xml

В нем все предельно ясно и понятно. Приведем пример:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="3" uniqueCount="3">
	<si>
		<t>ааа</t>
	</si>
	<si>
		<t>ввввв</t>
	</si>
	<si>
		<t>//infostart.ru/public/225624/</t>
	</si>
</sst>

Каждый тег <si/> - это значение текстовой ячейки. Как писали выше ссылки на файл sharedStrings.xml осуществляются по индексу, начиная с 0.

Решение поставленной задачи

Итак мы немного ознакомились со структурой файла с разрешением xlsx.
Для решения поставленной задачи нам необходимо:

  1. отредактировать файл /xl/worksheets/sheet.xml добавив в него теги <hyperlink>;
  2. отредактировать файл /xl/worksheets/_rels/sheet1.xml добавив в него теги <Relationship>;
  3. отредактировать файл /xl/sharedStrings.xml, где мы поменяем наши ссылки вида //infostart.ru/public/edit/ на текст "Подробнее".

Данные преобразования я выполнял с помощью объекта ДокументDOM. Вы можете вопользоваться другими способами.

Но есть один неприятный нюанс!

1С не умеет корректно прописывать пространство имен в атрибутах тегов! Для обхода этой проблемы пришлось вставить вот такой костыль:

//ФайлXLSX - структура, содержащая информация о распакованном архиве
Чтение = Новый ЧтениеТекста;
Чтение.Открыть(ФайлXLSX["Путь"+ИмяДокументаDOMФайлаXLSX]);
ДанныеФайла = Чтение.Прочитать();
//При добавлении тега <hyperlinks> вместо атрибута r:id был вставлен атрибуат faileID
ДанныеФайла = СтрЗаменить(ДанныеФайла, "faileID", "r:id");
Чтение.Закрыть();

Запись = Новый ЗаписьТекста;
Запись.Открыть(ФайлXLSX["Путь"+ИмяДокументаDOMФайлаXLSX]);
Запись.Записать(ДанныеФайла);
Запись.Закрыть();

Ну и в конце мы долждны запаковать наши файлики обратно:

ЗаписьZIP = Новый ЗаписьZipФайла();
ЗаписьZIP.Открыть(ИмяВременногоФайлаАрхива);
ЗаписьZIP.Добавить(ФайлXLSX.ДиректорияФайла+"\*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);		
ЗаписьZIP.Записать();

P.S.

На инфостарте был ряд публикаций, в которых данные читались из файлов XLSX, используя данный метод

Excel выгрзука XML

См. также

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 1C:Бухгалтерия 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 руб.

09.11.2016    241177    1107    906    

1035

Загрузка и выгрузка в 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 дней БЕСПЛАТНОГО пользования!

5400 руб.

12.08.2021    37580    402    68    

172

Загрузка и выгрузка в 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 форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 10.02.2025, версия 9.9 - 9.15)

16800 руб.

20.11.2015    158896    387    378    

517

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

Обработки загрузки данных о продажах WildBerries предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 3.0; Розница, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3

4800 руб.

11.12.2019    59189    1012    3    

251

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

Кто получает документы в формате XML из различных сервисов ЭДО (формат 820 приказ ФНС 31 мая 2019) и набивает их вручную в 1С, тот наверняка хотел бы автоматизировать этот процесс. Поддержка конфигураций: Бухгалтерии 3, УПП 1.3, 1С:КА 2.4 и 1С:КА 2.5, УТ10, УТ11.4 и УТ11.5. Для бухгалтерии 3 добавлена поддержка формат 5.03 от 23/01/2025

3600 руб.

11.02.2020    94436    316    157    

231

Загрузка и выгрузка в 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    218402    667    529    

458

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

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

4800 руб.

23.01.2022    11660    63    0    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Дмитрий74Чел 239 05.06.24 12:11 Сейчас в теме
2. Дмитрий74Чел 239 07.06.24 15:40 Сейчас в теме
Если кто будет ковыряться таким же способом в xlsx то вот совет: чтобы формулы пересчитались при открытии файла - вставьте fullCalcOnLoad = "1"в файле workbook.xml в секции calcPr.
user1523931; +1 Ответить
Оставьте свое сообщение