Python, как объединить разные книги Excel в одну книгу Excel в виде листов - PullRequest
0 голосов
/ 21 апреля 2020

Есть ли способ в python, с помощью которого мы можем объединить разные книги Excel в одну книгу Excel, содержащую листы с данными этих разных книг Excel?

Например, допустим, у меня две книги Excel 1 ) emp.xlsx и 2) dept.xlsx Я хочу выводить как output.xlsx (с рабочими таблицами в качестве emp и dept с данными emp.xlsx и dept.xlsx). Пожалуйста, поделитесь своими мыслями по этому поводу.

С уважением, Kawaljeet

1 Ответ

1 голос
/ 21 апреля 2020

Что вам нужно сделать, это получить каждый лист один за другим, а затем создать Excel с каждым из этих листов. Вы можете использовать имя файла для именования новых листов, как в emp-sheet1 , emp-sheet2 , dept-sheet1 и т. Д.

Пример гнезда предполагает, что у вас есть два файла Excel с именами emp.xlsx и dept.xlsx, и создает новый файл output.xlsx, содержащий все листы и значения:

#!pip install openpyxl
#!pip install xlrd

import pandas as pd

def get_sheets(filenames):
    '''
    This function generates dataframes from excel sheets.
    Returns:
    - dfs: a list of dataframes one for each sheet
    - sheets: combined names for the new sheets filename+-+sheetname

    '''
    sheets = []
    dfs = []
    for file in filenames:
        xl = pd.ExcelFile(file)
        sheet_names = xl.sheet_names
        for sheet in sheet_names:
            dfs.append(xl.parse(sheet, header=None))
            sheets.append(file.split('.')[0]+'-'+sheet)
    return dfs, sheets


def save_xls(dfs, sheets, xls_path):
    '''
    Saves each dataframe in dfs as a sheet with the name in sheets 
    into the file specified in xls_path
    '''
    with pd.ExcelWriter(xls_path) as writer:
        for n, df in enumerate(dfs):
            df.to_excel(writer, sheets[n], index = False, header = None)
        writer.save()



filenames = ['emp.xlsx', 'dept.xlsx']
dfs, sheets = get_sheets(filenames) 
save_xls(dfs, sheets, 'output.xlsx')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...