Это небольшая часть моего кода парсинга веб-страниц.
wb = xw.Book("jockeyclub.xlsx")
rc1 = wb.sheets['Race Card 1']
besttime = 7
rc1.range('S7').formula = f'=MIN(IF({besttime}1:{besttime}150<>"", {besttime}1:{besttime}150))'
rc1.range('AA7').formula = f'=MATCH(MIN(IF({besttime}1:{besttime}150<>"", {besttime}1:{besttime}150)), {besttime}1:{besttime}150, 0) + ROW({besttime}1) - 1'
он печатает следующие формулы в ячейках S7 и AA7, но добавляет «@» в середине.
для ячейки S7 он печатает
=MIN(IF(@BQ1:BQ150<>"", BQ1:BQ150))
для ячейки AA7 он печатает
=MATCH(MIN(IF(@BQ1:BQ150<>"", BQ1:BQ150)), BQ1:BQ150, 0) + ROW(BQ1) - 1
Обе формулы не работают из-за "@" посередине. Почему он там и как я могу избавиться от него с помощью кода?
Спасибо, можно ли как-нибудь избавиться от оператора неявного пересечения?
Не могу сказать, чего вы пытаетесь достичь, без снимка экрана или копируемых данных. Здесь есть несколько примеров в SO. Посмотрите здесь также вы используете более ранние версии Excel, тогда вы можете нажать CTRL SHIFT ENTER, удалив @ вручную
Я пишу программу через python, которая использует excel (xlwings), поэтому я не могу выполнить ввод сдвига управления.
Но какая у вас версия Excel? Как я понял из тегов, это было сделано с использованием Python, так что это полностью зависит от кода, который вы пишете, и версии Excel, которую вы используете.
В настоящее время я использую Excel версии 16.75.2.
@NNBananas, когда вы говорите, что формулы не работают, что происходит? Есть ли ошибка типа # в Excel?
@bugdrow написано #Н/Д






Range.Formula использует «Неявную оценку пересечения», что означает, что формула не оценивается на основе массива разливов. Именно поэтому Excel вставляет «@» в формулу в одном или нескольких местах.
Range.Formula2 — это «массивная версия» вставки формулы. Если вы используете его, вставка «@» должна происходить только в том случае, если это единственный способ, которым формула будет иметь смысл для Excel (и, возможно, даже не тогда).
Эта ссылка является хорошим объяснением Microsoft того, что происходит. (Именно в документации Microsoft никто не ожидает получить неработающую ссылку, и приведенное выше является кратким изложением важной части.)
Я не могу сказать, как вы получаете доступ к Range.Formula2 (или к любой другой функции «xxxx.xxxxx2») на различных языках/инструментах, которыми вы отметили свой вопрос, но я совершенно уверен, что у них у всех есть способ.
Большое спасибо! Теперь код работает отлично!
Он называется Implicit-Intersection-Operator и добавлен, потому что вы используете функцию
Raconдля возврата одного значения.