python的新手,并使用它来自动化一些财务报告流程。
我有50多个文件,每个文件都有一组工作表。跨文件的工作表集是相同的(名称是相同的,colum标题和格式是相同的)。它们的区别仅在于行数和数据本身。
我想要实现的是将几个工作表附加到其中。 附加条件是: *仅从FIRST工作簿工作表中复制标题(即第一行)。 每次下一次迭代都应仅复制和粘贴从第二行开始的数据。
代码有效,没有“仅在第一次迭代中复制标头”的条件。
当代码转到第二个文件时(特别是在\ listAB [r-1] .append(e.value)\ section中),我遇到“列表索引超出范围”异常,而我在弄清楚该列表时非常迷失这些调整参数的值。
我的代码具有“第一次迭代条件”,如下所示:
all_files = os.listdir(url_source)
wb_out = openpyxl.load_workbook(url_result + 'database.xlsx')
ws_out = wb_out[sheet_to_lookup] #provided by user input
def copy_and_paste(sheet_to_lookup):
first = True
index = 1
for file in all_files:
if first == True:
print(file)
wb_in = openpyxl.load_workbook(url_source + file)
ws_in = wb_in[sheet_to_lookup] #provided by user input
columns = ws_in.max_column
rows = ws_in.max_row
# creating dataframe as a list to copy and placing it to buffer
listAB = []
for i in range(1, rows + 1):
listAB.append([])
for r in range(1, rows + 1):
for c in range (1, columns + 1):
e = ws_in.cell(row = r, column = c)
listAB[r-1].append (e.value)
print (file + ' copied successfully.')
# pasting
for r in range (index, rows + index):
for c in range (1, columns +1):
j = ws_out.cell(row = r, column = c)
j.value = listAB[r-index][c-1] #correcting for index-parameter to stay within range of r and list for 2+ iterations
print (file + ' pasted sucessfully.')
wb_out.save(url_result + 'database.xlsx')
index += rows - 1
first = False
else:
listAB = []
for i in range(2, rows + 2):
listAB.append([])
for r in range(2, rows + 2):
for c in range (1, columns + 1):
e = ws_in.cell(row = r, column = c)
listAB[r-1].append (e.value)
print (file + ' copied successfully.')
# pasting
for r in range (index, rows + index+1):
for c in range (1, columns +1):
j = ws_out.cell(row = r, column = c)
j.value = listAB[r-index][c-1] #correcting for index-parameter to stay within range of r and list for 2+ iterations
print (file + ' pasted sucessfully.')
wb_out.save(url_result + 'database.xlsx')
index += rows
我希望输出工作簿中有91行。 1用于文件1的标头 54用于文件1中的数据 来自文件2的36个数据(跳过文件2中的第一个标题行)。
谢谢。
编辑。 如果有一种更有效的复制和粘贴数据的方式,请让我知道。此外,始终欢迎对代码进行改进。
编辑。 问题:如何从第二行开始在第二次迭代中复制和设置数据?