以下是支持在xlsx工作表中附加数据的代码。
import pandas as pd from openpyxl import load_workbook from openpyxl.utils.dataframe
import dataframe_to_rows
wb = load_workbook('./test.xlsx')
ws = wb['Sheet1']
df = pd.DataFrame({'Data': [11, 20, 30, 20, 15, 30, 45]})
for r in dataframe_to_rows(df):
ws.append(r)
wb.save("test.xlsx")
这是我每次运行代码时都要附加的数据,数据也从第2行开始放置;为什么Excel数据不是从(0,0)单元格开始。我的要求是从(0,0)更新数据
由于使用了append,因此每次调用函数时都会追加数据。我的要求是清理此表(仅擦除sheet1的内容)并添加从0,0开始的数据帧数据应该是达到1和2要求的代码。 (我不想在此操作期间覆盖sheet2和其他工作表内容)
我们非常感谢您的帮助。
答案 0 :(得分:0)
为什么Excel数据不是从(0,0)单元格开始的。
由于工作表类的the .append
method:
在当前工作表的底部附加一组值。
换句话说,此方法找到下一个可用/空行,并转储数据那里,这很有意义。您还期望append
方法如何工作? list.append
不会写入项目0,而是将新成员添加到列表中。与worksheet.append
方法相同的想法。
为了首先清除现有单元格,请尝试:
How to clear a range of values in an Excel workbook using OpenPyXl
答案 1 :(得分:0)
似乎dataframe_to_rows
调用正在添加额外的空行,这就是为什么您看到额外的行
>>> df
Data
0 11
1 20
2 30
3 20
4 15
5 30
6 45
>>>
>>> print( [*dataframe_to_rows(df)] )
[[None, 'Data'], FrozenList([None]), [0, 11], [1, 20], [2, 30], [3, 20], [4, 15], [5, 30], [6, 45]]
>>>
确定要使用openpyxl。如果没有,您可以按照以下步骤轻松完成
>>> fname = './test.xlsx'
>>> sheet = 'Sheet2'
>>> with ExcelWriter(fname, engine='openpyxl') as writer:
... writer.book = load_workbook(fname)
... if sheet in writer.book:
... del writer.book[sheet]
... df.to_excel(writer, sheet)