Ошибка при назначении формулы столбцу с помощью F-строк

Мне нужно было заменить несколько столбцов в необработанной таблице данных (опорная часть этого листа) формулами.
Для этого я использовал пакет Xlwings, и он успешно работает с другими формулами, но не с этой конкретной.

Эти формулы работают;

#column Y: Year 1-FA   #Works perfectly
sheet_obj.range("Y2:Y"+str(max_row)).formula = f'=IF(NUMBERVALUE(C2)=1,CONCAT("Y1-",L2),L2)'
    
#column z: custom    #Works perfectly
sheet_obj.range("Z2:Z"+str(max_row)).formula = f'=CONCAT(B2,"-",E2,"-",I2,"-",J2,"-",K2)'

Следующее возвращает ошибки;

#column P: New Out of PP   #this is whwre the it shows error
    sheet_obj.range("P2:P"+str(max_row)).formula = f'''=IFERROR(IF(OR(O2<>"",O2<>"NULL"),IF(OR(J2 = "Term 1",J2 = "Term 33"),O2+MIN(XLOOKUP(CONCAT(N2,C2,J2,H2),Subject_Map!$G:$G,Subject_Map!$H:$H,"",0),Raw(Merged)!S2),O2),O2),O2)'''

формула, которую я хочу назначить,

'=IFERROR(IF(OR(O2<>"",O2<>"NULL"),IF(OR(J2 = "Term 1",J2 = "Term 33"),O2+MIN(XLOOKUP(CONCAT(N2,C2,J2,H2),Subject_Map!$G:$G,Subject_Map!$H:$H,"",0),Raw(Merged)!S2),O2),O2),O2)'

не могли бы вы отформатировать свой код?

Elerium115 12.03.2024 12:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, проблема в названии листа Raw(Merged), его нужно заключить в одинарную кавычку 'Raw(Merged)'!S2:

sheet_obj.range("P2:P"+str(max_row)).formula = '''=IFERROR(IF(OR(O2<>"",O2<>"NULL"),IF(OR(J2 = "Term 1",J2 = "Term 33"),O2+MIN(XLOOKUP(CONCAT(N2,C2,J2,H2),Subject_Map!$G:$G,Subject_Map!$H:$H,"",0),'Raw(Merged)'!S2),O2),O2),O2)'''

@rachel_ust: это не имя листа! Поскольку между «Raw(Merged)» нет пробела, кавычки не нужны. Проблема здесь в том, что когда я каким-то образом тестировал ее отдельно при преобразовании всей этой формулы в одну ячейку, появляется дополнительный символ «\». Я не могу его удалить. При использовании метода .replace() он также удаляет все остальные двойные кавычки.

Vishnu 13.03.2024 12:31

Когда я печатаю =IFERROR(IF(OR(O2<>"",O2<>"NULL"),IF(OR(J2 = "Term 1",J2 = "Term 33"),O2+MIN(XLOOKUP(CONCAT (N2,C2,J2,H2),Subject_Map!$G:$G,Su‌​bject_Map!$H:$H,"",0‌​),Raw(Merged)!S2),O2‌​),O2), O2) в Excel Excel жалуется на скобку в Raw(Merged). но возможно я тебя неправильно понял.

rachel 13.03.2024 14:13

Ответ правильный, вам нужны кавычки вокруг имени листа, если в имени есть круглые скобки. Вы можете легко проверить это, выбрав любую ячейку на листе «Необработанный (объединенный)», например. «A1». Скопируйте ячейку, затем вставьте ссылку в ячейку на другом листе. Вы увидите, что имя заключено в кавычки ='Raw(Merged)'!$A$1. Я протестировал вашу формулу с этим исправлением, и она написана правильно и работает. Если в формуле появляется символ «\», это может быть попыткой разграничить круглые скобки.

moken 14.03.2024 01:18

Я думаю, это правильно, может быть, я пропустил скобки, но все же я застрял в преобразовании всей этой формулы в одну строку, чтобы я мог перейти к объекту листа xlwings и применить ее.

Vishnu 14.03.2024 09:28

Чтобы привести пример, проверьте эту fn, мне нужна эта формула в виде одной строки, если вы проверите O/P, появится дополнительный '\'. def Special2(): f_string = f'''=IFERROR(IF(OR(O2<>"",O2<>"NULL"),IF(OR(J2 = "Term 1",J2 = "Term 33") , O2+MIN(XLOOKUP(CONCAT(N2,C2,J2,H2),Subject_Map!$G:$G,Subject‌​_Map!$H:$H,"",0), 'Raw(Merged)'!S2 ),O2),O2),O2)''' return (f_string)

Vishnu 14.03.2024 09:29

Это результат функции выше: '=IFERROR(IF(OR(O2<>"",O2<>"NULL"),IF(OR(J2 = "Term 1",J2 = "Term 33"), O2+MIN(XLOOKUP(CONCAT(N2,C2,J2,H2),Subject_Map!$G:$G,Su‌​bject_Map!$H:$H,"",0‌​),\'Raw(Merged)\' !S2‌​),O2),O2),O2)'

Vishnu 14.03.2024 09:31

У меня это работает: data_ws.range("P2:P4").formula =special2(). Я просто скопирую и вставлю ваш Special2() в свой Clion. ничего не изменить.

rachel 14.03.2024 09:44

Дополнительный '\' действует как escape-символ в Python. w3schools.com/python/gloss_python_escape_characters.asp

rachel 14.03.2024 09:46

Другие вопросы по теме