Опция "Копировать формулы из шаблона" работает странно

59 views
Skip to first unread message

Илюха

unread,
Sep 16, 2020, 8:57:31 AM9/16/20
to XLSX Workbench
Добрый день!

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

Когда выгружаю данные в такой шаблон, периодически проявляется проблема - часть формул остаётся на листе, а часть заменяется значениями, как в предыдущей версии. Причём ошибка "плавающая", т.е. на одних данных проявляется, а на других - нет. Шаблон содержит несколько листов, на каждом из них ячейки расположены стандартно - нет объединений, обычная "сетка". Подскажите, я что-то делаю не так?

Igor

unread,
Sep 16, 2020, 9:06:26 AM9/16/20
to XLSX Workbench
Илья, добрый день.
Т.е. проблема в том, что не происходит пересчет формул (т.е. формула в ячейке есть, но значение неправильное)? Или формулы вообще нет, а вместо неё значение?

С уважением, Игорь 

среда, 16 сентября 2020 г. в 15:57:31 UTC+3, Илюха:

Илюха

unread,
Sep 16, 2020, 10:43:49 AM9/16/20
to XLSX Workbench
Да, формулы вообще нет, а вместо неё значение.

Заметил вот что: ошибка происходит в строке, т.е. встречается некая "кривая" ячейка и после неё, правее - все нули (не знаю, рассчитанные значения, или просто нули). В строчке ниже - так же. Прчём ошибка проявляется в столбце "E". Например, формула "=D14+D15+D16" переносится нормально, а "=E14+E15+E16" - вызывает ошибку, которая распространяется на все столбцы справа.
А в строке, где формулы выглядят так: "=ЕСЛИ(ЕНД(VPR!D18);0;ЕСЛИ(VPR!D18 = ""; 0; VPR!D18))" этого не происходит.
Похоже, что буква "E" в формуле рушит структуру документа. Если это так, то я уже знаю, каким костылём можно справиться с этой проблемой - просто поставить в такие ячейки формулу =если(1=1; моя Формула; 0). Чуть позже проверю и отпишусь, помогло ли.

Илюха

unread,
Sep 16, 2020, 10:45:21 AM9/16/20
to XLSX Workbench
Точнее, не буква E, а строка "E14+..."

Илюха

unread,
Sep 16, 2020, 11:05:51 AM9/16/20
to XLSX Workbench
И вот это я написал неверно: "А в строке, где формулы выглядят так: "=ЕСЛИ(ЕНД(VPR!D18);0;ЕСЛИ(VPR!D18 = ""; 0; VPR!D18))" этого не происходит."

 Понятно, что не происходит, там же нет E...+. В общем, если такую формулу разместить в столбце E (например, ""=ЕСЛИ(ЕНД(VPR!E18);0;ЕСЛИ(VPR!E18 = ""; 0; VPR!E18))""), то формула переносится правильно. Вот такая была мысль.

Igor

unread,
Sep 16, 2020, 1:27:30 PM9/16/20
to XLSX Workbench
Илья,  дело в том, что если программно создать файл, в котором будут неконсистентные формулы, эксель может вести себя очень непредсказуемо (в т.ч. такой файл может вообще не открыться). Опция "Копировать формулы из шаблона" предполагает именно копирование формулы "как есть", без какой-либо корректировки адресов участвующих ячеек и наименований листов. Т.е., например, если в формуле будут ссылки на несуществующие ячейки, это приведет к сбою. 

Я правильно понимаю, что в результирующем файле есть "кривые" формулы (которые ссылаются на несуществующий лист или несуществующий диапазон) ? В строке 14 или в столбце E есть такие ошибочные формулы ? Возможно, неконсистентные формулы есть на других листах ? Если все формулы в шаблоне консистентны, то не могли бы Вы выгрузить и прислать мне шаблон (ну или его упрощенный вариант) для того. чтобы я мог воспроизвести эту ошибку в своей системе и отладить её ?

С уважением, Игорь   
среда, 16 сентября 2020 г. в 18:05:51 UTC+3, Илюха:

Илюха

unread,
Sep 16, 2020, 3:26:56 PM9/16/20
to XLSX Workbench
Игорь, привожу тестовый кейс. Файл - 1 лист, все формулы консистентны, очень простые - чисто сложение.

Можно его выгрузить вообще без привязки к контексту, только указать один паттерн от ячейки A1 до ячейки Y9, со свойством "копировать формулы из шаблона". Вот сам файл:

https://drive.google.com/file/d/15Afg0R1LB4WTC4O741V9FFjxYOpUzYKK/view?usp=sharing

Сейчас у меня при попытке выгрузить его, в столбцах A и B сохраняются формулы, а в столбце С и правее - рассчитанные числа.

Илюха

unread,
Sep 16, 2020, 3:54:50 PM9/16/20
to XLSX Workbench
Вот что получилось после выгрузки: https://drive.google.com/file/d/1-4KS8poFouqLUtWQw7IVZbZg8xqohHqL/view?usp=sharing

Я немного скорректировал свои наблюдения. Насчет столбца "E" мои предположения оказались неверными.
Сейчас я наблюдаю следующее: если в ячейках стоит формула, типа =A1+A2, то формулы остаются только в двух левых столбцах. Во всех столбцах правее, вставляется значение.
(в моём рабочем формуляре формулы начинались в столбце "С", поэтому для столбцов С и D работало, а в столбце E уже не работало - поэтому я решил, что это связано с буквой E. )

И я таки нашёл костыль. Если вместо =A1+A2 написать =sheet1!A1+A2, то всё работает во всех столбцах.

Igor

unread,
Sep 17, 2020, 7:48:11 AM9/17/20
to XLSX Workbench
Илья, я посмотрел, 
действительно, мне понадобится скорректировать логику копирования формул, т.к. в разных случаях они неодинаково хранятся в файле. 
Например, когда Вы "протягиваете" формулу, она в XML записывается в первую ячейку, а в остальные ячейки ставится признак "shared" . Я это не учел.

Вы можете сейчас поступить так:
вместо "протягивания" на диапазон ячеек, зайдите в каждую ячейку и впечатайте туда нужную формулу. Так должно заработать.

С уважением, Игорь

среда, 16 сентября 2020 г. в 22:54:50 UTC+3, Илюха:

Илюха

unread,
Sep 17, 2020, 7:59:59 AM9/17/20
to XLSX Workbench
Благодарю за помощь! Правда, мой костыль для меня больше подходит =) У меня лист на 175 строк и 40 столбцов, поэтому добавить в формулах ссылку на лист мне проще - это можно сделать через копи-паст... В любом случае огромное спасибо!

Igor

unread,
Sep 17, 2020, 8:01:45 AM9/17/20
to XLSX Workbench
Вам спасибо за то, что обнаружили эту проблему!

С уважением, Игорь  
четверг, 17 сентября 2020 г. в 14:59:59 UTC+3, Илюха:
Reply all
Reply to author
Forward
0 new messages