openpyxl превратить столбец в ряд - PullRequest
0 голосов
/ 03 октября 2019

У меня есть книга Excel origin.xlsx с 3 листами. Я хотел бы просмотреть все ячейки определенного столбца на всех листах (скажем, столбец «А»), скопировать значение каждой ячейки и пропустить все их (по очереди) в ряд другой рабочей книги destination.xlsx. т.е. сделать одну строку из столбцов из нескольких листов. Мой код, однако, помещает в строку только значения последней ячейки каждого из 3 столбцов в origin.xlsx

import openpyxl
wb = openpyxl.load_workbook('origin.xlsx')
g_sheet=wb.sheetnames
print(g_sheet)
for i in g_sheet:
    print(i)
    ws = wb.get_sheet_by_name(i)
    print(ws)
    for row in range(1, ws.max_row + 1):
        for column in "A":
            cell_name = "{}{}".format(column, row)
            print(ws[cell_name].value)
        wb = openpyxl.load_workbook('destination.xlsx')
        wss = wb.active
        wss.cell(row=1, column=ws.max_column + 1, value=ws[cell_name].value)
        wb.save(filename)

Ответы [ 2 ]

1 голос
/ 03 октября 2019

вы можете вначале открывать исходные и конечные файлы, используя отдельные принтеры, выполнять итерации по рабочим таблицам в исходном коде и добавлять все row значения выбранного column к конечному файлу, как показано ниже,

# _s denotes source/origin and _d -> destination
wb_s = openpyxl.load_workbook('origin.xlsx')

# create worrkbook 'destination.xlsx' if it does not exist
wb_d = openpyxl.Workbook()
wb_d.save('destination.xlsx')
ws_d = wb_d.active

row_num = 1
for sheet in wb_s.sheetnames:
    ws_s = wb_s[sheet]
    for cell_s in ws_s['A']: # if 'A' is the column to copy
#         if cell_s.row > 1:    to avoid  writing column headings  to destination file if source column has column heading
        ws_d.cell(row=row_num, column=1, value=cell_s.value) # column =1 will write the selected values to column 'A
        row_num+=1
wb_d.save('destination.xlsx')
0 голосов
/ 04 октября 2019
from openpyxl import load_workbook, Workbook
wb1 = openpyxl.load_workbook('origin.xlsx', read_only=True)
wb2 = Workbook()

ws1 = wb1.active
ws2 = wb2.active

cols = ws1.iter_cols(min_col=1, max_col=1, values_only=True)
for col in cols:
    ws2.append(col)
...