Формулы в XLSX: какие значения получает импорт
Успешное чтение XLSX ещё не означает, что получено количество по согласованным входам. Владельцу нужны основание расчёта, наблюдение читающей программы и соответствующая запись у получателя. Разберём одну передачу и пробу, которая выявляет оставшееся прежнее число после изменения плана.

Сначала определите, какой момент должен отражать результат
Допустим, руководитель передаёт в учётную систему план комплектации. Для строки LOT-7 согласованы пять коробок по сто штук. Требуемый результат — количество штук по этой версии плана. Запишите рядом с передачей идентификатор строки, версию входных данных V1, единицы измерения, лист Handover и ячейку C2. Независимый расчёт даёт 500. Число из самого проверяемого файла нельзя назначить эталоном только потому, что оно выглядит правдоподобно.
У исторической выгрузки может быть другая задача: сохранить ранее утверждённое количество, даже если сегодняшний план изменился. Такое значение нельзя молча пересчитать по новым входам. Владелец должен выбрать назначение передачи: текущий расчёт по V1 либо зафиксированный результат за определённый момент. Дальше мы проверяем первый вариант. Если в книге смешаны оба назначения, согласуйте их для каждого нужного результата до каких-либо исправлений.
Что нужно узнать о читающей программе
Microsoft описывает в SpreadsheetML отдельные элементы: f содержит формулу, v — сохранённый результат её вычисления; v может отсутствовать. У Excel есть автоматический и ручной режимы расчёта. Изменение этих настроек в настольном Excel затрагивает все открытые книги.
openpyxl не вычисляет формулы. В документированном load_workbook параметр data_only выбирает текст формулы или ранее сохранённое значение. Этот переключатель не запрашивает пересчёт. Такое поведение конкретной библиотеки нельзя приписывать любому импортёру XLSX.
Попросите исполнителя назвать программу, версию и фактический режим чтения вашего маршрута. В протоколе должно быть понятно, получает ли следующий шаг число, выражение для отдельного вычислителя или отсутствие значения. Слова «Excel поддерживается» этого вопроса не решают. Здесь также нужно указать, кто отвечает за расчёт перед передачей и где сохраняется его результат.
Одна строка проходит две передачи
Для статьи мы создали полностью синтетическую книгу XLSX и отдельные её варианты. В A2 находится число коробок, в B2 — штук в коробке, в C2 — формула =A2*B2. Состояния сохранённого результата намеренно заданы внутри файлов после создания книги. Это контролируемый опыт, а не запись работы Excel. В каждом варианте проверены два документированных вызова load_workbook с data_only=False и data_only=True, установленная версия openpyxl — 3.1.5.
В первой передаче входы равны 5 и 100, но в C2 заранее помещено старое число 400. Чтение с False возвращает =A2*B2, с True — 400. Сравнение с независимо рассчитанными 500 выявляет расхождение в 100 штук. Формула в файле есть, входы подходят V1, однако полученное число нельзя принять как текущий результат этой строки.
Во втором варианте при тех же входах мы намеренно записали 500. Чтение значения теперь совпало с ожиданием. Этим подтверждена только арифметическая согласованность данного случая. Мы не установили, когда и где Excel пересчитал книгу: Excel в опыте вообще не запускался. Также не подтверждены остальные ячейки, зависимости и производственная загрузка. Даже правильное число без описания передачи оставляет владельцу вопрос о воспроизводимости следующего файла.
Измените один вход, сохранив формулу
Теперь появляется версия V2: шесть коробок по сто штук. В третьем синтетическом файле меняем только A2 с 5 на 6, а сохранённые 500 оставляем специально. Формула остаётся =A2*B2. Повторное чтение даёт прежние 500; независимое ожидание уже равно 600. Такой результат должен провалить проверку V2, хотя проверка V1 с тем же числом проходила.
В реальном проекте выполните согласованную пробу на безопасной копии через тот же расчётный и приёмный маршрут, которым пойдёт передача. До запуска зафиксируйте изменение и ожидаемый итог. После него запишите наблюдение, а не заранее проставленный успех. Если проверяющий лист продолжает сравнивать с эталоном V1, он проверяет уже другой вопрос. Эталон, входная версия и проверяемый файл должны относиться к одной передаче.
Одна формула, три проверки
Синтетический опыт · LOT-7
Формула во всех трёх файлах: =A2*B2
1. Передача
5 коробок × 100 шт.
Ожидается 500 · прочитано 400
Расхождение
2. Совпадение
Те же входы: 5 × 100
Ожидается 500 · прочитано 500
Совпала только эта проверка
3. Изменение входа
Теперь 6 коробок × 100 шт.
Ожидается 600 · прочитано 500
Прежний результат не подходит
Нет результата
5 × 100 · прочитано None
Оставить нерешённым
Настоящий ноль
0 × 100 · прочитано 0
Ноль подтверждён для этого случая
Отсутствие результата оставьте отдельным исходом
В отдельном варианте с входами 5 и 100 мы удалили сохранённый результат C2. Текст формулы прочитался, а чтение значения вернуло None. Для обязательного количества это нерешённый случай: ожидаемые 500 не получены. Нельзя подставить ноль ради заполненной строки или считать отсутствие числа подтверждением нулевой потребности.
Для сравнения создан вариант с нулём коробок и сотней штук в коробке. Его сохранённый результат равен 0, чтение возвращает числовой ноль, независимый расчёт тоже даёт 0. В протоколе сохраняйте эти два исхода раздельно. Если получатель пропускает пустое поле или оставляет прежнее значение, зафиксируйте и это реальное действие: оно не восполняет отсутствующее доказательство расчёта.
Как вернуть спорный файл на подготовку
При расхождении остановите приёмку затронутого результата и передайте исполнителю конкретную пару: «LOT-7, V2, ожидается 600, прочитано 500». Сохраните исходный файл. Ответственный за подготовку должен вернуть новый артефакт с описанием согласованного расчёта и сохранения либо экспорта: программа и версия, использованные входы, необходимые зависимости, исполнитель и время. Дата изменения файла сама по себе не подтверждает этот путь. Контрольная сумма помогает отличить переданный файл от другой копии, но не доказывает правильность его вычислений.
Если сторонам удобнее передавать только значения, согласуйте такой формат отдельно. Превращение уже полученных 500 в CSV не сделает из них требуемые 600. Сначала нужна проверенная подготовка результата по V2, затем экспорт и чтение именно экспортированного файла. Другой допустимый проектный вариант — отдельно реализованный и проверенный расчёт у получателя. Его правила и поддерживаемые выражения нужно определить заранее; произвольная логика книги из одного расширения файла не восстанавливается.
Не включайте для этой проверки макросы или внешние связи и не меняйте общие настройки приложения. При неожиданном предупреждении остановитесь и передайте файл уполномоченному специалисту. Наш опыт использует только целочисленное умножение вымышленных входов, без внешних данных. Для сложной книги специалист отдельно определяет зависимости и охват проверки; этот пример не служит разрешением выполнять неизвестное содержимое.
Что владелец принимает в итоге
Соберите короткий лист передачи. В нём нужны три отдельные группы доказательств, связанные одним идентификатором файла:
- Основание: назначение результата, утверждённая версия входов, строка, лист и ячейка, единицы, независимое ожидание.
- Подготовка и чтение: кто и каким согласованным способом подготовил файл; какой инструмент и режим реально его прочитали; какое значение получено.
- Приёмная запись: идентификатор объекта у получателя, фактически записанное количество, сравнение с ожиданием и решение по расхождению.
Для LOT-7 по V2 отдельно проверьте входы 6 и 100, прочитанное число и количество в целевой записи. Скриншот исходной книги не заменяет два последних наблюдения. Укажите объём приёмки: конкретные записи и расчётные зависимости, покрытые проверкой, а также исключения с ответственными. Успех одной строки не распространяйте на весь файл или будущие выгрузки.
С таким листом можно обсуждать перенос данных и запуск в SABSUS. Поддерживаемый формат, обработку формул и способ подтверждения результата нужно согласовать для конкретного проекта. Статья не заявляет встроенный пересчёт или автоматическое выявление старых значений. Если ещё не определён смысл самих расчётов и ручных поправок, начните с разбора переноса таблиц в рабочую систему.
Источники и продолжение
Документация объясняет формат и конкретные инструменты. Числа, входные версии и решения примера заданы редакцией и проверены локально.
Источники проверены 17 октября 2026 года. Документация openpyxl обозначена версией 3.1.3, локальный опыт выполнен на 3.1.5. Excel, LibreOffice, SABSUS и производственный маршрут не тестировались.