了解 openpyxl 模块中 Worksheet 的 append 方法是如何工作的

Undestanding how the append method of Worksheet from openpyxl module works

这是一些代码:

from openpyxl import load_workbook

wb = load_workbook('myfile.xlsx')
ws = wb.active 
# data for filling Excel table
rows = (
   (88, 46, 57),
   (89, 38, 12),
   (23, 59, 78),
   (56, 21, 98),
   (24, 18, 43),
   (34, 15, 67)
)
for row in rows:
    ws.append(row)
wb.save('my_changed_file.xlsx')

执行上面的代码后,我本以为会看到Excel table是从第一行开始填写的,但是table是从第二行开始填写的

为什么 append 方法如此有效?

这真的不是 append 的错。每个工作簿在启动时至少有一行和一列。前段时间我遇到了类似的问题:。根据作者 (Charlie Clark) 的说法,内部计数器 max_rowmax_column 必须始终严格为正,因此 append 将始终写入第二行。

您始终可以在控制索引的循环中设置单元格,这与 append 为方便起见所做的非常相似:

for r, row in enumerate(data, start=1):
    for c, value in enumerate(row, start=1):
        worksheet.cell(row=r, column=c).value = value

填充 A1 后,append 将完全按照您的预期工作。

我遇到了同样的问题 - 空行自动出现,直到这个线程才知道为什么。

将分享我的最终解决方案:

"""Goal: adding new rows to a worksheet without empty row"""

"""python imports"""
import openpyxl
import pandas

"""Load input workbook"""
wb = openpyxl.load_workbook(filename='file.xlsx')

"""Activate worksheet named 'data'."""
ws = wb['data']

"""Read in new data from data1.csv to pandas.dataframe"""
new_dataframe = pandas.read_csv("data1.csv")

"""Iterate over dataframe rows and write values to worksheet"""
for i, row in new_dataframe.iterrows():
    # ws.append leaves first line empty
    # to get data written from first row,  need to use writing to cell
    if i == 0:
        for c, value in enumerate(row, start=1):
            ws.cell(row=2, column=c).value = value
    else:
        current_row = [row.col1, row.col2, row.col3]
        ws.append(current_row)

"""Change table range"""
ws.tables['MyTable'].ref = "A1:E5"

"""Save workbook"""
wb.save(filename='file.xlsx')