Копирование нескольких листов в один (приложение) - PullRequest
0 голосов
/ 01 июля 2019

Впервые в Python и использую его для автоматизации некоторых процессов финансовой отчетности.

У меня есть более 50 файлов с набором рабочих листов каждый.Набор рабочих листов одинаков для разных файлов (имена одинаковые, заголовки и форматы столбцов одинаковые).Они отличаются только количеством строк и самими данными.

Я пытаюсь добиться добавления нескольких таблиц в.Дополнительное условие: * копировать заголовок (т. Е. Первую строку) только из рабочей книги FIRST.Каждая следующая итерация должна копировать и вставлять только данные, начиная со 2-й строки.

Код работает, без условия «копировать заголовки только в первой итерации».

Я получаю списокисключение индекса вне диапазона, когда код переходит ко 2-му файлу (в частности, в \ 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, 36 для данных из файла 2 (1-я строка заголовка в файле 2 пропущена).

Заранее спасибо.

edit.Если есть более эффективный способ копирования и вставки данных, какой я хочу, пожалуйста, дайте мне знать.Кроме того, улучшения кода всегда приветствуются.

edit.вопрос: как мне скопировать и вставить данные во второй итерации, начиная со 2-й строки?

...