【问题标题】:Is there a way to change the scope of a named range from workbook to worksheet using Python?有没有办法使用 Python 将命名范围的范围从工作簿更改为工作表?
【发布时间】:2023-01-14 00:42:51
【问题描述】:

我使用函数 define_name() 在我的 Excel 工作表上创建了一个命名范围

 with pd.ExcelWriter(excel_broker, engine='xlsxwriter') as writer:
        # Get xlsxwriter objects
        workbook = writer.book
        header = workbook.add_format({'bold':True, 'border' : 1 })
        format_float = workbook.add_format({'num_format': '# ###'})

        takerMaker_client.to_excel(writer, sheet_name="Maker Taker", index_label = ["", "", ""], 
                                                        startrow=5)
        worksheet = writer.sheets['Maker Taker']
        worksheet.set_column('D:E', 20, format_float)
        workbook.define_name('Client', '=OFFSET(\'Maker Taker\'!$D$7,,,COUNTA(\'Maker Taker\'!$D$7:$D$1048576),)')

但是当我尝试使用命名范围“客户端”在 PowerPoint 上创建图表时,我注意到它链接到我的 Excel 文件的名称而不是我的 Excel 工作表的名称。

='ExcelFile_Name.xlsx'!Client

有没有办法在 Python 上将我命名范围的范围从“工作簿”设置为“工作表”以获取:

='Maker Taker'!Client

我尝试了函数 worksheet.define_name 而不是 workbook.define_name 但是这个函数不存在并且函数 define_name 中没有范围参数

【问题讨论】:

    标签: python pandas named-ranges


    【解决方案1】:

    问题是 writer.book 确实代表了整个文件,但它的实际类型和相关方法可能取决于底层引擎。当您使用看起来像 xlswriter 方法的 workbook.define_name 时,我假设您的 Pandas 实例使用 xlswriter 引擎。

    在那种情况下,xlswriter documentation 说:

    也可以通过使用语法 'sheetname!definedname' 在工作表名称前加上前缀来定义本地/工作表名称

    所以你应该使用:

    workbook.define_name("'Maker Taker'!Client",
        "=OFFSET('Maker Taker'!$D$7,,,COUNTA('Maker Taker'!$D$7:$D$1048576),)")
    

    当心:未经测试...

    【讨论】:

    • 谢谢塞尔吉!当我添加工作表名称时效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    相关资源
    最近更新 更多