写入现有 xlsx 文件中的指定列集

问题描述 投票:0回答:1

我有一个 Excel 文件,我想向其中添加一个数据框。我必须将数据放在特定的列中,这些列位于文件的开头。由于我每天都必须执行此过程,因此我还必须首先清除这些列。我需要将数据从 A 列到 G 列,然后 Excel 文件中有一些公式,我想将它们应用到从 H 开始的其余列中。我只想将数据写入前 A 到 G 列,并保持 H 列中的数据完整。有没有办法只将数据写入少数 Excel 列而不写入其他列。

我正在使用

openpyxl
但遇到了一些问题。主要问题是,不是将数据添加到 A 到 G 列,而是在 H 列以后每次都会被覆盖。我怎样才能实现这个目标?

python-3.x excel openpyxl
1个回答
0
投票

要将数据框写入现有工作表而不影响工作表或整个工作簿上的任何现有数据,您可以在追加模式下使用 ExcelWriter。

写入器在“追加”模式下启用;

mode=a
需要引擎是 Openpyxl。
要保持工作表中的现有数据不变,请将“if_sheet_exists”设置为“overlay”。在这种情况下,仅当数据存在于 to_excel 写入的单元格中时才会被覆盖。

在下面的示例代码中,foo.xlsx 和 Sheet1 存在,数据位于 Sheet1 上的 H 列及之后。具有 7 列的数据框被写入 Sheet1 的 A 至 G 列。

此代码会将数据从单元格 A1 写入到列 G (G7) 仅覆盖此范围内的数据(如果存在)。

import pandas as pd

### Test dataframe with test data
data_frame = pd.DataFrame({'Fruits': ['Apple', 'Banana', 'Mango', 'Dragon Fruit', 'Musk melon', 'grapes'],
                            'Weight': [20, 30, 15, 10, 50, 40],
                            'Quantity': [4, 12, 31, 1, 31, 63],
                            'Dates': ['2020', '2019', '2023', '2022', '2023', '2019'],
                            'Names': ['Pete', 'Jordan', 'Gustaf', 'Sophie', 'Sally', 'Simone'],
                            'Age': [22, 21, 19, 19, 29, 21],
                            'Utensil': ['knife', 'fork', 'spoon', 'plate', 'cup', 'saucer']
                            })

### Create a context manager for the writer and set the operation states 
with pd.ExcelWriter("foo.xlsx", 
                    mode="a",  # Mode a for 'append'
                    engine="openpyxl",  # Must be openpyxl for appending
                    if_sheet_exists='overlay'  # Only overwrite data if its in the dataframe range
                   ) as writer:
    ### Write data to the sheet
    data_frame1.to_excel(writer,
                         sheet_name="Sheet1",  # Name of Sheet to write to
                         # startrow=0,  # Row to start writing dataframe write, note 0 is row 1 and is the default
                         # startcol=0,  # Column to start writing dataframe, also starts at 0 which is the default
                         # header=True,  # Include dataframe Header, default is True
                         index=False  # Write the dataframe without the index column
                         )

© www.soinside.com 2019 - 2024. All rights reserved.