Использование Python при выгрузке в Excel с формулами

05.04.24

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

Иногда встает задача, что нужно выгрузить какую-то таблицу с формулами, чтобы дальше пользователь мог играться с данными. И есть простой путь использовать com-объект Excel, чтобы после выгрузки "активировать" формулы, но что делать, если нет windows машины ни на сервере, ни на клиенте.

Скачать файл

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

Наименование По подписке [?] Купить один файл
ПримерPythonВыгрузкаExcelСФормулами
.cf 83,14Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

И тут приходит идея либо распаковать xlsx, и копаться во внутренностях формата, либо взять какой-то сторонний инструмент и использовать его.

В данной статье мы попробуем использовать python и его пакет openpyxl для решения данной задачи.

Нам потребуется:

1. установить python (https://www.python.org/)

2. установить пакет openpyxl (pip install openpyxl)

3. скрипт (reform.py), который при нахождении в ячейке знака "=" будет активировать формулу

from openpyxl import load_workbook
from sys import argv

script, inputFile, outputFile = argv

wookbook = load_workbook(inputFile)

for worksheetName in wookbook.sheetnames:
    worksheet = wookbook[worksheetName]
    for i in range(0, worksheet.max_row):
        for col in worksheet.iter_cols(1, worksheet.max_column):
            if str(col[i].value)[0] == '=':
                col[i].value = col[i].value

wookbook.save(outputFile)

Например, мы сформировали Табличный документ, где в ячейках прописали формулы, и сохранили его (input.xlsx), но при открытии для Excel это всего лишь текст

 

 

Чтобы текст в ячейке превратился в формулу, нужно запустить скрипт

python reform.py input.xlsx output.xlsx

после в файле output.xlsx все формулы будут работать

 

 

Тем самым мы решили проблемы по выгрузке файла Excel с формулами без Windows машин.

Пакет openpyxl очень богат, и с его помощь можно, например, изменять формат ячейки (популярный пример это формат Даты, чтобы при отборе было дерево)

Нюансы при использовании:

1. использовать формулы в английском формате, не только ключевое слово, но и знаки разделители (например в русских формулах используется ";", в английских ",")

2. при windows окружении при использовании "ЗапуститьПриложение" использовать полный путь до python.exe. (при использовании Linux можно просто python или python3, проверяйте как он в вашей системе называется)

Пример реализован на платформе 1С:Предприятие 8.3 (8.3.22.2411).

excel python

См. также

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С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

6000 5100 руб.

09.11.2016    234249    1062    898    

1003

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

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

2400 руб.

12.08.2021    35508    348    68    

155

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    107020    313    173    

326

Загрузка и выгрузка в 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.10.2024, версия 9.8 - 9.13)

15600 руб.

20.11.2015    156100    376    378    

513

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

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

4800 руб.

09.12.2020    25352    252    1    

114

SALE! 15%

Загрузка и выгрузка в 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 9435 руб.

29.10.2014    216762    657    527    

456
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. xlmel 05.04.24 12:00 Сейчас в теме
Таким образом Вы предлагаете каждому пользователю 1С в организации поставить python на компьютер, установить openpyxl и положить программу, так как заранее не известно понадобится или нет. Может проще сделать приложение на Flask (это не реклама Flask, можно взять любой фреймворк, просто с этим работал и были положительные результаты), опубликовать его на web-сервере и вызывать его стандартными HTTP-запросами. Мой опыт показывает, что предложенный вызов интерпретатора python занимает намного больше времени, чем http-запрос. Кроме того, используя разные роуты, можно подключить разные функции: и форматирование, и "оживление" формул и так далее.
2. Tahallus 441 05.04.24 12:12 Сейчас в теме
(1) Вроде я не писал что надо каждому пользователю ставить, можно поставить на сервере и все делать там, готовый результат передавать на клиент. Опять же это пример демонстрации подхода, а не законченное решение. Про вызывать напрямую или через http-запрос тоже вопрос реализации, стоит ли разрабатывать и поднимать Flask, http-запрос если тебе надо просто разослать например 100 прайсов один раз в день, цена ускорения допустим 1 минута, а затраты на поддержку всего этого стоят того, вопрос.
3. EugeneerS 06.04.24 10:22 Сейчас в теме
Большая проблема что сама платформа не имеет средств. И вообще в целом до сих пор нормально не работает с офисами...
Хотя за десятки лет 1С могла бы и свой офис сделать. И в том числе внутренние табличные документы развить нормально.
Спрос же есть!
4. kalyaka 1105 06.04.24 15:55 Сейчас в теме
Можно прочитать и напрямую из 1С, используя ПостроительDOM и xPath. Для этого необходимо:
1. распаковать xlsx (zip архив)
2. в файлах xml заменить строку "xmlns:=" на "xmlns:_=" - это нужно чтобы работал встроенный в платформу xPath
3. прочитать листы из файла "xl\workbook.xml" по выражению XPath = "//sheet"
4. прочитать нужный лист "xl\worksheets\sheet%1.xml"
5. вначале найти все "зашаренные формулы" по выражению XPath = "//f[@ref]", формула в узле "f", индекс в узле "si"
6. затем найти все формулы в нужной строке XPath = СтрШаблон("//row[@r=%1]", НомерСтроки). При этом если узел "f" пустой, то прочитать атрибут "si" и взять формулу из зашаренных ранее по индексу
5. leoxz 268 03.06.24 13:26 Сейчас в теме
Благодарю за статью, пригодилась.

Можно сразу перебирать листы и вместо:
for worksheetName in wookbook.sheetnames:
worksheet = wookbook[worksheetName]

Использовать
for worksheet in wookbook:

при windows окружении при использовании "ЗапуститьПриложение" использовать полный путь до python.exe
Проверяю на Windows машине - работает сразу Python. Скорее всего это зависит от настройки PATH и PYTHONPATH
Оставьте свое сообщение