将数据帧写入现有 Excel 文件中的多个工作表。打开 Excel 文件时出现“我们发现 X.xlsx 中的某些内容存在问题”

dix*_*uke 5 excel pandas openpyxl

我正在根据现有的 Excel 文件创建一些 dfs。然后,我将每个 dfs 写入不同(现有 Excel)文件中自己单独的工作表中。脚本执行正常,但是当我打开 excel 文件时,dfs 被写入,我收到以下错误消息:“我们发现‘X.xlsx’中的某些内容存在问题...

我尝试不使用 openpyxl,因为类似帖子上的几个答案表明您不必使用 openpyxl;但是,pandas 文档表明如果写入 .xlsx,则需要使用 openpyxl。

import pandas as pd
from openpyxl import load_workbook

df_complete = pd.read_excel('completed_contracts_2019.xlsx', 
index_col=None)
df_wip_out = pd.read_excel('wip19.xlsx', index_col=None)
df_in = pd.read_excel('wip_18_to_19.xlsx', index_col=None)

with pd.ExcelWriter('Final_Template.xlsx', engine='openpyxl') as writer:
    writer.book = load_workbook('Final_Template.xlsx')
    df_complete.to_excel(writer, sheet_name='complete', index=False)
    df_wip_out.to_excel(writer, sheet_name='wipout', index=False)
    df_in.to_excel(writer, sheet_name='wipin', index=False)
Run Code Online (Sandbox Code Playgroud)

我希望打开 Excel 文件而不会出现错误。

bea*_*zyj 1

使用 openpyxl 遇到同样的问题,但实际上可能不是 openpyxl 的问题。

根据我的经验,在我收到一个弹出窗口后,显示“警报我们发现......中的某些内容存在问题”。查了一下错误原因,最后发现,在Excel中如果数据格式为“常规”,则不能输入以“==”开头的字符串,否则Excel会认为是语法错误。但如果数据格式是“Text”,就不会有问题。

两种解决方案: 1)如果您确定某些字符串以“==”开头,并且在您的情况下没有必要,您可能必须更改第一个“=”或在开头插入另一个字符。然后用openpyxl将其写入xls文件。这是我申请的。2)或者您可以使用openpyxl将单元格的数据格式(可能是“number_format”)设置为“Text”。我没有成功尝试这种方式,因为在手动将单元格数据格式设置为“文本”后,用openpyxl读取其“number_format”,得到“@”的值(不是“文本”)。但是当我用 openpyxl 将“number_format”设置为“@”,然后写入“==”时,它仍然遇到问题。

除了“==”之外,不知道是否还有其他字符串也会被Excel视为语法错误。无论如何,如果您碰巧因“==”而遇到问题,您可以尝试第一个解决方案作为解决方法。