将多个工作表复制到一个(附加)

时间:2019-07-01 19:17:48

标签: python excel openpyxl

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中的第一个标题行)。

谢谢。

编辑。 如果有一种更有效的复制和粘贴数据的方式,请让我知道。此外,始终欢迎对代码进行改进。

编辑。 问题:如何从第二行开始在第二次迭代中复制和设置数据?

0 个答案:

没有答案