【问题标题】:Updating excel files functions更新excel文件功能
【发布时间】:2021-06-18 08:57:01
【问题描述】:

我正在尝试创建一个可以更新(添加数据)到现有 .xlsx 文件的函数。

def update_excel(path, sheetname, data):
  filename = path
  with pd.ExcelWriter(filename, mode='a',engine="openpyxl") as writer:
     print('SHEETNAME', sheetname)
     df = pd.read_excel(path, sheetname)
     cols_del= 'Unnamed: 0'
     del df[cols_del]
     print('SHEETNAME1', sheetname)
     df = pd.concat((df, data),sort=True)
     print('SHEETNAME2', sheetname)
     df.to_excel(writer, sheet_name=sheetname)
     print('SHEETNAME3', sheetname)
     writer.save()
     print('SHEETNAME4', sheetname)
     print("Booked")

当前示例:这将获取 sheet1 的数据并使用新条目对其进行更新,但将新的更新版本写入名为 sheet11 而不是 sheet1 的新工作表。在上面的所有打印语句中,它都会打印 sheet1,所以我很困惑。

正常打开 excel 文件时,我从 excel 中收到一条错误消息:

我们发现“文件名”中的某些内容存在问题。 xlsx'。你想让我们尽量恢复吗?

我认为这会导致 excel 从 Sheet1 中尽可能多地恢复,然后将其放入具有更新的 Sheet11 中,我该如何消除此错误?

【问题讨论】:

  • filename 未在您的函数中定义。你不是在尝试读写同一个文件,对吧?
  • 另外,如果excel文件打开了,会被锁定编辑,所以需要try: except:或者类似的检查。
  • @crayxt 是的,我想读写同一个文件。我定义了文件名=路径
  • @D.L 执行该函数时excel文件全部关闭

标签: python excel pandas xlsxwriter


【解决方案1】:

创建、写入和保存工作簿:

df1 = pd.DataFrame([['a', 'b'], ['c', 'd']],
                   index=['row 1', 'row 2'],
                   columns=['col 1', 'col 2'])
df1.to_excel("output.xlsx")

指定工作表名称:

df1.to_excel("output.xlsx",
             sheet_name='Sheet_name_1')

如果您希望写入工作簿中的多个工作表,则需要指定一个 ExcelWriter 对象:

df2 = df1.copy()
with pd.ExcelWriter('output.xlsx') as writer:  
    df1.to_excel(writer, sheet_name='Sheet_name_1')
    df2.to_excel(writer, sheet_name='Sheet_name_2')

ExcelWriter 也可用于附加到现有的 Excel 文件:

with pd.ExcelWriter('output.xlsx',
                    mode='a') as writer:  
    df.to_excel(writer, sheet_name='Sheet_name_3')

也可以在此处找到说明(用于获取 excel 数据框): https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html

希望这有帮助。

【讨论】:

  • @D.L 我已经更新了我上面的问题,本质上更新正在发生,但不是更新从工作表读取的内容,而是更新它然后将更新后的版本写入新工作表
  • 这是一个很好的选择,可以避免这个问题......
  • 如何更新同一张工作表,而不是用更新重写到新工作表?
  • 我相信如果你写到同一张纸上,它会覆盖现有的数据,或者你问如何将数据附加到一张纸上? (这可能是最好的新堆栈问题)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多