Применить вызовы методов цепочки в Python - PullRequest
0 голосов
/ 16 июня 2020

Я бы создал python класс «ExcelFile» для обработки добавления нескольких листов в книгу,

Функция должна быть c обобщенной, чтобы любой из команды мог легко ее использовать,

Я выполнил разработку, и все в порядке, мой код такой:

def addSheet(df,"sheet_name1"):
    -- reading template
    -- add sheet1
    -- replace existing file

и после того, как я вызываю функцию много раз, это зависит от того, сколько листов я хочу добавить, поэтому:

addSheet(df1,"sheet_name1")
addSheet(df2,"sheet_name2")
addSheet(df3,"sheet_name3")

Я хочу реорганизовать свой код и поместить его в класс python и реализовать шаблон проектирования, который поможет мне выполнить работу, позвонив

xls_file = ExcelFile().useTemplate("template_path").addSheet(df,"sheet_name1").addSheet(df2,"sheet_name2").writeXlsFile("filename")

What'is имя шаблона проектирования, чтобы сделать что-то подобное?

1 Ответ

1 голос
/ 16 июня 2020

Итак, после поиска: я сделал цепной метод

import pandas as pd import openpyxl

class ExcelFile(object):
    template_path = None
    file_path = None
    book = None
    xlwriter = None

    def replaceSheet(self, dataframe, sheet_name):
        pandas_df = dataframe.toPandas()
        self.book = openpyxl.load_workbook(self.template_path)
        self.xlwriter = pd.ExcelWriter(self.template_path, engine='openpyxl')
        # test if the sheet doesn't exist
        sheet_id = self.book.get_sheet_by_name(sheet_name)
        self.book.remove(sheet_id)
        self.xlwriter.book = self.book
        pandas_df.to_excel(self.xlwriter, sheet_name=sheet_name, index=False, header=True)
        return self

    def useTemplate(self, template_path):
        self.template_path = template_path
        return self

    def writeFile(self, file_path):
        self.book.save(file_path)
        self.xlwriter.save()
        self.xlwriter.close()
        return file_path

Anf вместо того, чтобы вызывать функцию много раз, я вызываю по:

xls_file = ExcelFile()
xls_file.useTemplate(template_path=templatepath) \
    .replaceSheet(dataframe=Sales_df, sheet_name="DB Sales") \
    .replaceSheet(dataframe=cost_df, sheet_name="DB COST") \
    .replaceSheet(dataframe=b2c_df, sheet_name="DB B2C") \
    .writeFile(file_path=local_tmp_file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...