#python #excel #openpyxl
#python #excel #openpyxl
Вопрос:
Пожалуйста, если вы не можете предоставить конструктивное решение, не помечайте его как дубликат, потому что я не нашел никакого решения, и это очень мало говорит о вашей заинтересованности в предоставлении некоторой помощи.
Excel отклоняет формулу, но другие строки в других ячейках разрешены. Я использую названия формул на английском языке и пробовал использовать запятые и точки с запятой с тем же результатом. Формула состоит из шаблона markdown и имеет несколько вложенных условий. Часть кода:
wb = Workbook()
sheet= wb.active
l=str(sheet.max_row 1)
formula='=CONCATENATE("**"amp;{}amp;"**"amp;CHAR(10)amp;CHAR(10)amp;"- **Ponente:** "amp;{}amp;CHAR(10)amp;"- **Fuente:** "amp;{};IF(EXACT({};"");"";CHAR(10)amp;"- **ID:** "amp;{});CHAR(10)amp;"- **Web:** "amp;{}amp;CHAR(10)amp;"- **Idioma:** "amp;{}amp;CHAR(10)amp;"- **Etiquetas:** "amp;{};IF(EXACT({};"");;CHAR(10)amp;"- **Fecha:** "amp;{});IF(EXACT({};"");;CHAR(10)amp;"- **Notas:** "amp;{}))'.format("A" l,"B" l,"C" l,"D" l,"D" l,"E" l,"H" l,"G" l,"F" l,"F" l,"I" l,"I" l)
print (formula)
data={
"Título":[titulo],
"Autor":[profesor],
"Fuente":[plataforma],
"ID":[id],
"Web":[url],
"Fecha":[fecha_esp],
"Etiquetas":[etiquetas],
"Idioma":[idioma],
"Notas":[notas],
"Plantilla":[formula]
}
dataframe_pandas = pd.DataFrame(data)
for x in dataframe_to_rows(dataframe_pandas, index=False, header=False):
sheet.append(x)
wb.save(filename)
Вывод на консоль показывает следующую формулу:
=CONCATENATE("**"amp;A2amp;"**"amp;CHAR(10)amp;CHAR(10)amp;"- **Ponente:** "amp;B2amp;CHAR(10)amp;"- **Fuente:** "amp;C2;IF(EXACT(D2;"");"";CHAR(10)amp;"- **ID:** "amp;D2);CHAR(10)amp;"- **Web:** "amp;E2amp;CHAR(10)amp;"- **Idioma:** "amp;H2amp;CHAR(10)amp;"- **Etiquetas:** "amp;G2;IF(EXACT(F2;"");;CHAR(10)amp;"- **Fecha:** "amp;F2);IF(EXACT(I2;"");;CHAR(10)amp;"- **Notas:** "amp;I2))
Эта формула отклоняется Excel, но если я скопирую и вставлю ее в поле Excel, у меня не возникнет проблем.
- Восстановить рабочую книгу: https://i.stack.imgur.com/1OL7T.png
- Отклонено поле Plantilla: https://i.stack.imgur.com/Ztcpx.png
- Вставьте формулу в поле и запустите: https://i.stack.imgur.com/whlOA.png
Итак, в чем проблема?
Обновить
Ранее эта проблема была опубликована, но она была помечена как дублированная, даже не пытаясь помочь. Теперь я очень благодарен трем людям, которые ответили.
Проблема заключалась в формуле на python. Я заменил все точки с запятой, но, должно быть, у меня была какая-то опечатка, которую я исправил позже и больше никогда не пробовал. Но с предоставленными доказательствами я попробовал еще раз, и это сработало
Комментарии:
1. С такой огромной формулой очень легко получить опечатку. Что делает эта формула? Вы генерируете файл Excel с помощью кода, так зачем вообще такая формула? Почему бы не вычислить вывод в коде и добавить его в качестве дополнительного столбца?
2. Кроме того, вывод — это то, что в первую очередь нельзя использовать в Excel, ни для вычислений, ни для вывода на печать. Почему Excel вообще используется? Если вы хотите создать многострочный отчет, вам следует использовать ячейки в разных строках и либо объединить их, либо отформатировать, чтобы они отображались так, как вы хотите.
3. Когда я скопировал и вставил формулу в Excel, Excel отклонил ее.
4. @DavidGaertner, ты хорошо копируешь формулу? Я предоставил скриншоты, которые показывают, что формула работает
5. @PanagiotisKanavos, у меня тоже есть такая опция, и она работает без проблем, но иногда мне нужно отредактировать файл вручную, поэтому мне нужно вставить метод, то есть формулу, для генерации соответствующего кода markdown. И нет, это не отчет, это excel, который я использую в качестве инвентаря. Он не очень большой, и мне нужно поделиться им с несколькими людьми, обладающими базовыми навыками работы с компьютером
Ответ №1:
Попробуйте заменить ваше semicolons
на ,
в формуле и проверьте.
Я попробовал вручную в libreoffice и сравнил его с автоматически сгенерированной формулой. Оба отличаются тем ,
, что они автоматически изменились ;
на ,
. Затем я заменил ;
на ,
в файле python. и автоматически созданный Excel в порядке.
Комментарии:
1. Вы понимаете, что произошло? В языках, где
,
используется десятичный разделитель, разделителем списка должно быть что-то еще. Это обычно;
. Оба разделителя определены в настройках языкового стандарта пользователя2. В любом случае это было попробовано и не удалось
have tried commas and semicolons with the same result.
3. Удивительно, это работает. Я предполагаю, что у меня было несколько опечаток в формуле, и это не сработало, когда я заменил точки с запятой на запятые. Большое спасибо, я пару дней сходил с ума, но после прочтения вас я решил попробовать еще раз и с большой радостью
Ответ №2:
Вы можете попробовать с ExcelWriter
from pandas import ExcelWriter
writer = pd.ExcelWriter('output.xlsx')
# write dataframe to excel
df_marks.to_excel(writer)
# save the excel
writer.save()
writer.close()
Комментарии:
1. Изменение библиотеки не исправит неработающую формулу
2. Я попробую это при следующей возможности. Большое вам спасибо