首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中应用链接方法调用

在Python中应用链接方法调用
EN

Stack Overflow用户
提问于 2020-06-16 18:42:52
回答 1查看 44关注 0票数 0

我会创建一个python类"ExcelFile“来处理在工作簿中添加多个工作表,

函数应该是泛型的,这样团队中的任何一个人都可以很容易地使用它。

我做了开发,一切都很好,我的代码如下:

代码语言:javascript
复制
def addSheet(df,"sheet_name1"):
    -- reading template
    -- add sheet1
    -- replace existing file

在我多次调用该函数之后,它取决于我想要添加多少工作表,所以:

代码语言:javascript
复制
addSheet(df1,"sheet_name1")
addSheet(df2,"sheet_name2")
addSheet(df3,"sheet_name3")

我想重构我的代码,把它放到一个python类中,并实现一个设计模式,它将帮助我通过调用

代码语言:javascript
复制
xls_file = ExcelFile().useTemplate("template_path").addSheet(df,"sheet_name1").addSheet(df2,"sheet_name2").writeXlsFile("filename")

这样做的设计模式的名称是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-06-16 20:19:36

所以在搜索之后:我使用了chain方法

导入熊猫作为pd导入openpyxl

代码语言:javascript
复制
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不是多次调用函数,而是通过以下方式调用:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62406605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档