我们如何将新数据写入现有 Excel 电子表格?

How can we write new data to existing Excel spreadsheet?

我有一个创建每周运行的近 1,000 行数据框的进程。我希望能够附加到现有的 sheet 而不必重新读取传播 sheet 因为随着文件的增长这将花费很长时间。我在这里看到了这个答案:。不幸的是,它似乎不适合我。这是我试图附加到该现有文件的一些虚拟代码。目前它会导致两个问题——首先,它不会附加数据,而是会覆盖数据。其次,当我去打开文件时,即使程序运行后,它也只允许我以只读模式打开它。我已经确认我也在使用 pandas 1.4。

import pandas as pd


data = {'Name': ['Tom', 'Joseph', 'Krish', 'John'], 'Age': [20, 21, 19, 18]}
df = pd.DataFrame(data)


filename = "Testing Append Process.xlsx"
writer = pd.ExcelWriter(filename, engine="openpyxl", mode="a", if_sheet_exists="overlay")

df.to_excel(writer, index=False)
writer.save()

这里有一种方法可以限制电子表格的读取量,但需要使用 openpyxl。

正在设置:openpyxl documentation

max_rows = max((c.row for c in active_ws['A'] if c.value is not None)) + 1

这将 return 文档中的最大行数...向其中添加一个,您将有一个起点来开始放置您需要添加的数据。

以下是使用 openpyxl 放置该数据的示例:

data = {'Name': ['Tom', 'Joseph', 'Krish', 'John'], 'Age': [20, 21, 19, 18]}

count = 0 
for x in range(4):
    name = data['Name'][x]
    age = data['Age'][x]

    active_ws.cell(row=max_row+count, column=1).value = name
    active_ws.cell(row=max_row+count, column=2).value = name

    count += 1

编辑:可以将最大行数变量调整为您要检查的任何列。 (这个检查“A”列)...在您的数据完成之前,该列不能有空单元格,否则,它会给您一个不正确的“最大行数”。

请注意,Testing Append Process.xlsx 文件必须在 运行 执行此代码之前创建。

from openpyxl import load_workbook
import pandas as pd

data = {'Name': ['Tom', 'Joseph', 'Krish', 'John'], 'Age': [20, 21, 19, 18]}
df = pd.DataFrame(data)

filename = "Testing Append Process.xlsx"
workbook = load_workbook(filename)
writer = pd.ExcelWriter(filename, engine='openpyxl')
writer.book = workbook
writer.sheets = {ws.title: ws for ws in workbook.worksheets}

df.to_excel(writer, startrow=writer.sheets['Sheet1'].max_row, index = False, header= False)

writer.close()

Returns以下如果你会运行代码两次。