в Excel возникли проблемы с открытием файла, созданного с помощью openpyxl

#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, у меня не возникнет проблем.

Итак, в чем проблема?

Обновить

Ранее эта проблема была опубликована, но она была помечена как дублированная, даже не пытаясь помочь. Теперь я очень благодарен трем людям, которые ответили.

Проблема заключалась в формуле на 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. Я попробую это при следующей возможности. Большое вам спасибо