You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化基于Zip处理启用状态Widgets的Openpyxl代码?

Hey there, let's get that Openpyxl code sorted out properly. I'll tackle all the issues you mentioned—wonky zip usage, PEP8 indent warnings, hardcoded ranges, and moving away from deprecated coordinate handling to the more efficient iter_cols method.

Here's the optimized, clean version of the code that fixes all those problems:

from openpyxl import load_workbook

def get_enabled_widgets(file_path, widget_ranges):
    """Extract list of enabled widgets from specified Excel column ranges.
    
    Args:
        file_path (str): Path to your Excel workbook.
        widget_ranges (list): List of tuples for column ranges (1-indexed). 
                              Example: [(1, 2), (5, 6)] for columns A-B and E-F.
                              Each tuple follows (start_col, end_col), where the first column
                              holds widget names and the second holds "Enabled"/"Disabled" status.
    
    Returns:
        list: Names of all widgets marked as "Enabled".
    """
    # Load workbook in read-only mode for better performance with large files
    wb = load_workbook(file_path, read_only=True)
    ws = wb.active  # Swap with wb['YourSheetName'] if you need a specific sheet
    
    enabled_widgets = []
    
    for start_col, end_col in widget_ranges:
        # Iterate over the columns in the current range, get values directly
        widget_columns = ws.iter_cols(
            min_col=start_col,
            max_col=end_col,
            values_only=True
        )
        # Zip the name and status columns to pair each widget with its status
        for widget_name, is_enabled in zip(*widget_columns):
            # Skip headers or invalid rows (adjust this condition to match your sheet)
            if (isinstance(widget_name, str) 
                and is_enabled.strip().lower() == "enabled"):
                enabled_widgets.append(widget_name)
    
    wb.close()
    return enabled_widgets

# Test it out with your file
if __name__ == "__main__":
    enabled = get_enabled_widgets("your_widgets.xlsx", [(1, 2), (4, 5)])
    print("Enabled Widgets:", enabled)

Breakdown of the Fixes & Improvements

1. Ditched Deprecated Coordinates for iter_cols

Openpyxl's coordinate-based access is being phased out, so we use ws.iter_cols()—it's purpose-built for efficient column-wise iteration and returns values directly (thanks to values_only=True) instead of heavy cell objects. We use 1-indexed column numbers here, which matches how Excel labels columns (A=1, B=2, etc.).

2. Fixed Zip Usage & Added Multi-Range Support

  • No more hardcoding ranges! The widget_ranges parameter lets you pass multiple non-consecutive column pairs (like A-B and E-F) to process all your widget sections in one go.
  • The zip(*widget_columns) line correctly unpacks the columns returned by iter_cols to pair each widget name with its corresponding status. This fixes any misalignment issues you might have had with the original zip usage.

3. Squashed the PEP8 Indent Warning

That "continuation line under-indented" warning was from poorly aligned line breaks. In this code:

  • We use consistent 4-space indentation (PEP8 standard).
  • Long conditions (like the status check) are wrapped with proper visual indentation, so the linter won't complain.

4. Better Performance & Readability

  • read_only=True makes loading large workbooks way faster—critical if you're dealing with big sheets of widgets.
  • Clear docstring explains exactly what the function does, what inputs it takes, and what it returns.
  • Explicit workbook closure ensures we free up system resources (good practice even though read-only mode handles this automatically).
  • The status check uses .strip().lower() to handle messy input (like " enabled " or "ENABLED")—makes the code more robust.

5. Flexible Header Handling

The comment about skipping headers is a placeholder—you can adjust the if condition to match your sheet's structure (e.g., if widget_name != "Widget Name" and ... to skip a header row).

内容的提问来源于stack exchange,提问作者flywire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:04:42