【问题标题】:excel has problems opening a file created with openpyxlexcel 在打开使用 openpyxl 创建的文件时出现问题
【发布时间】:2021-01-12 00:20:06
【问题描述】:

如果您无法提供建设性的解决方案,请不要将其标记为重复,因为我没有找到任何解决方案,而且它很少说明您有兴趣提供一些帮助。

Excel 拒绝公式,但允许其他单元格中的其他字符串。我使用英文公式的名称,并尝试使用逗号和分号,结果相同。 该公式由一个降价模板组成,并具有多个嵌套条件。 部分代码为:

wb = Workbook()
sheet= wb.active
l=str(sheet.max_row+1)
formula='=CONCATENATE("**"&{}&"**"&CHAR(10)&CHAR(10)&"- **Ponente:** "&{}&CHAR(10)&"- **Fuente:** "&{};IF(EXACT({};"");"";CHAR(10)&"- **ID:** "&{});CHAR(10)&"- **Web:** "&{}&CHAR(10)&"- **Idioma:** "&{}&CHAR(10)&"- **Etiquetas:** "&{};IF(EXACT({};"");;CHAR(10)&"- **Fecha:** "&{});IF(EXACT({};"");;CHAR(10)&"- **Notas:** "&{}))'.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("**"&A2&"**"&CHAR(10)&CHAR(10)&"- **Ponente:** "&B2&CHAR(10)&"- **Fuente:** "&C2;IF(EXACT(D2;"");"";CHAR(10)&"- **ID:** "&D2);CHAR(10)&"- **Web:** "&E2&CHAR(10)&"- **Idioma:** "&H2&CHAR(10)&"- **Etiquetas:** "&G2;IF(EXACT(F2;"");;CHAR(10)&"- **Fecha:** "&F2);IF(EXACT(I2;"");;CHAR(10)&"- **Notas:** "&I2))

这个公式被Excel拒绝了,但是如果我把它复制粘贴到excel字段中,我就没有问题了。

那么,问题出在哪里?

更新

之前此问题已发布,但它被标记为重复,甚至没有尝试提供帮助。现在,我非常感谢回复的三个人。

问题是python中的公式。我替换了所有分号,但我一定有一些错字,后来我更正了,再也没有尝试过。但是根据提供的证据,我再次尝试并成功了

【问题讨论】:

  • 有了这么大的公式,很容易非常打错。这个公式有什么作用?您正在通过代码生成 Excel 文件,那么为什么会有这样的公式呢?为什么不在代码中计算输出并将其添加为额外的列?
  • 此外,输出是不能在 Excel 中使用的东西,无论是用于计算还是打印输出。为什么要使用 Excel?如果您想创建多行报告,您应该使用不同行中的单元格,然后将它们合并或格式化以按照您想要的方式显示。
  • 当我将公式复制并粘贴到 Excel 中时,Excel 拒绝了它。
  • @DavidGaertner,你复制公式好吗?我提供了显示公式有效的屏幕截图
  • @PanagiotisKanavos,我也有这个选项,它工作没有问题,但有时我需要手动编辑文件,所以我需要插入一个方法,即公式,以生成相应的降价代码.不,这不是报告,而是我用作库存的 Excel。它不是很大,我需要与几个具有基本计算机技能的人分享它

标签: python excel openpyxl


【解决方案1】:

尝试在公式中将semicolons 替换为, 并检查。

我在 libreoffice 中手动尝试过,并将其与自动生成的公式进行了比较。两者在, 上有所不同,因为它自动将; 更改为,。然后我在python文件中用,替换了;。并且自动生成的excel很好。

【讨论】:

  • 你明白发生了什么吗?在, 是小数点分隔符的语言环境中,其他的必须是列表分隔符。这通常是;。两个分隔符都在用户的区域设置首选项中定义
  • 这已经尝试过但还是失败了have tried commas and semicolons with the same result.
  • 太棒了,它有效。我想我在公式中有几个拼写错误,当我将分号更改为逗号时它不起作用。非常感谢,我疯了几天,但读了你之后,我决定再试一次,非常高兴
【解决方案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()

【讨论】:

  • 更改库不会修复损坏的公式
  • 下次有机会我会试试的。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2022-11-14
  • 2015-11-19
相关资源
最近更新 更多