了解 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_row
和 max_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')
这是一些代码:
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
的错。每个工作簿在启动时至少有一行和一列。前段时间我遇到了类似的问题:max_row
和 max_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')