【问题标题】:Excel named range for openpyxlopenpyxl的Excel命名范围
【发布时间】:2023-03-02 23:45:01
【问题描述】:

我有一个 excel 文件,它有多个工作表,Unit_1,Unit_2... 工作表的形式相同,但数据不同。在每张工作表上,都有一个名为“SIGNALS”的命名范围,它定义了“A1:C4”区域。我想在遍历工作表时通过引用命名范围来访问数据。

我使用此处的函数作为访问数据的基础,但是当我尝试定义工作表时,命名范围引用也不起作用。 https://stackoverflow.com/a/45554742/7661466

如果我将 range_name 定义为“SIGNALS”,我会从 Unit_1 表中获取数据,我假设因为它默认处于活动状态。

如果我将其定义为“Unit_2!A1:C4”,我会按预期从 Unit_2 工作表中获取数据。

例如,如果我将其定义为“Unit_1!SIGNALS”,则会收到 ValueError:SIGNALS 不是有效的坐标或范围。

我应该如何引用某个工作表中的命名范围?

例如,“Unit_1”工作表的表格。

【问题讨论】:

    标签: excel openpyxl


    【解决方案1】:

    在 openpyxl 上,您似乎无法通过引用工作表和命名范围来轻松引用命名范围。命名范围只能在活动工作表上轻松工作,但更改活动工作表似乎也相当麻烦。

    我从 https://stackoverflow.com/a/45554742/7661466 修改了 Mathias Fripp 的函数以更好地满足我的需要,尽管这可能不是最优雅的方式。

    首先,使用 Excel 中的工作表、单元格和命名范围数据构建数据框,然后根据该数据,单元格范围被工作表名称和“命名范围”-name 所掩盖。

    def dataframe_from_xlsx(xlsx_file, range_name):
    """ Get a single rectangular region from the specified file.
    range_name can be a standard Excel reference ('Sheet1!NAMED_RANGE')."""
    wb = openpyxl.load_workbook(xlsx_file, data_only=True, read_only=True)
    
    # get named range definitions from excel
    named_ranges = wb.defined_names.definedName
    data = []
    for range in named_ranges:
        sheet, cells = range.value.split("!")
        data.append([sheet, cells, range.name, ])
    named_ranges = pd.DataFrame(data, columns=['sheet', 'cells', 'name'])
    
    ws_name, reg = range_name.split('!')
    
    if ws_name.startswith("'") and ws_name.endswith("'"):
        ws_name = ws_name[1:-1]
    
    # get the cell range by masking
    mask = (named_ranges['sheet'] == ws_name) & (named_ranges['name'] == reg)
    cell_reg = named_ranges[mask]['cells'].iloc[0]
    region = wb[ws_name][cell_reg]
    
    df = pd.DataFrame([cell.value for cell in row] for row in region)
    return df
    

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多