Впервые в 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-й строки?