Python openpyxl数据框数据在Excel中编写并清除工作表内容

时间:2018-06-20 13:12:44

标签: python pandas openpyxl

以下是支持在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")
  1. 这是我每次运行代码时都要附加的数据,数据也从第2行开始放置;为什么Excel数据不是从(0,0)单元格开始。我的要求是从(0,0)更新数据

  2. 由于使用了append,因此每次调用函数时都会追加数据。我的要求是清理此表(仅擦除sheet1的内容)并添加从0,0开始的数据帧数据应该是达到1和2要求的代码。 (我不想在此操作期间覆盖sheet2和其他工作表内容)

我们非常感谢您的帮助。

2 个答案:

答案 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)