【问题标题】:Python: Write a dataframe to an already existing excel which contains a sheet with imagesPython:将数据框写入已存在的 excel,其中包含带有图像的工作表
【发布时间】:2018-07-03 12:12:19
【问题描述】:

我已经为此工作太久了。我有一张 Excel 表格(sheetname = 'abc'),里面有图像,我想要一个 Python 脚本,在同一个 Excel 文件的第二张单独的表格(sheetname = 'def')上写入数据框。谁能给我一些示例代码,因为每次我尝试编写数据框时,第一张带有图像的表格都会被清空。

这是我尝试过的:

book = load_workbook('filename_of_file_with_pictures_in_it.xlsx')
writer = pd.ExcelWriter('filename_of_file_with_pictures_in_it.xlsx', engine = 'openpyxl')
writer.book = book

x1 = np.random.randn(100, 2)
df = pd.DataFrame(x1)

df.to_excel(writer, sheet_name = 'def')
writer.save()
book.close()

它将随机数保存在名为“def”的工作表中,但第一个工作表“abc”现在变为空。

这里出了什么问题?希望有人可以帮助我。

【问题讨论】:

    标签: python excel pandas dataframe


    【解决方案1】:

    有趣的问题!使用 openpyxl,您可以轻松添加值、保留公式但不能保留图表。同样在最新版本 (2.5.4) 中,图表不会保留。所以,我决定解决这个问题 xlwings :

    import xlwings as xw
    wb = xw.Book(r"filename_of_file_with_pictures_in_it.xlsx")
    sht=wb.sheets.add('SheetMod')
    sht.range('A1').value = np.random.randn(100, 2)
    wb.save(r"path_new_file.xlsx")
    

    通过这个 sn-p,我设法插入了一组随机值并保存了修改后 xlsx 的新副本。当您插入命令时,excel 文件将自动打开,向您显示新工作表 - 无需更改现有工作表(包括图表和公式)。确保安装所有相互依赖项以使 xlwings 在您的系统中运行。希望这会有所帮助!

    【讨论】:

    • 谢谢!这就是我想要的!
    【解决方案2】:

    为此,您需要使用 Openpyxl 或类似的 Excel“阅读器”与 Pandas 结合使用,pandas 的 to_excel 函数是只写的,因此当您打开文件时它不会关心文件中的内容。

    【讨论】:

    • 我已经在以下行中使用了 Openpyxl,对吧?:writer = pd.ExcelWriter('filename_of_file_with_pictures_in_it.xlsx', engine = 'openpyxl')。你有一个例子说明如何按照你所说的方式解决它。
    • 你做了,但是你使用 Openpyxl 的“写作”引擎和 Pandas 的 ExcelWriter 函数,不涉及阅读。 Openpyxl 处理读取和写入。我手头没有解决问题的代码,但您肯定需要在执行任何操作之前读取 excel 文件,否则您的数据将会丢失。
    • 如果我错了,请纠正我,但我认为load_workbook是openpyxl的阅读功能。所以如果我这样加载它,图像怎么会丢失。
    • 如果我使用以下代码,那么我仍然遇到同样的问题(文本在那里,但图像消失了)。 from openpyxl import load_workbook wb = load_workbook('filename_of_file_with_pictures_in_it.xlsx') # 抓取活动工作表 ws = wb['abc'] # 数据可以直接赋值给cellws['A2'] = 'lalala' ws['B2'] = 123 ws['A3'] = 'lololo' ws['B3'] = 456 # 保存文件 wb.save('filename_of_file_with_pictures_in_it.xlsx')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2020-09-30
    相关资源
    最近更新 更多