我们如何将新数据写入现有 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。
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以下如果你会运行代码两次。
我有一个创建每周运行的近 1,000 行数据框的进程。我希望能够附加到现有的 sheet 而不必重新读取传播 sheet 因为随着文件的增长这将花费很长时间。我在这里看到了这个答案:
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。
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以下如果你会运行代码两次。