AGENT SKILL

openpyxl-merged-cell-safe-write

Safe pattern for writing values to merged cells in openpyxl spreadsheets

License 许可
MIT
最近更新
2026-04-16
Stars
★ 0
Forks
0

01 前言 Front Matter

name
openpyxl-merged-cell-safe-write
description
Safe pattern for writing values to merged cells in openpyxl spreadsheets

02 资源文件 1

03 SKILL.md 正文

OpenPyXL Merged Cell Safe Write Pattern

Problem

When creating formatted spreadsheets with openpyxl, merging cells and then assigning values to them causes MergedCell errors. This is a common pitfall that can consume multiple failed iterations.

Core Rule

Always assign values to the top-left cell of a merge range BEFORE applying the merge, or avoid assigning to merged cells entirely after the merge is applied.

Correct Pattern

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

# CORRECT: Set value first, then merge
ws['A1'] = 'Quarterly Revenue Report'  # Assign to top-left cell first
ws.merge_cells('A1:D1')                # Then apply merge

# Also set formatting after merge
ws['A1'].font = Font(bold=True, size=16)
ws['A1'].alignment = Alignment(horizontal='center')

Incorrect Pattern (Causes MergedCell Error)

# WRONG: Merge first, then assign value
ws.merge_cells('A1:D1')
ws['A1'] = 'Quarterly Revenue Report'  # This raises MergedCell error!

Step-by-Step Procedure

  1. Identify merge ranges you need for headers, titles, or grouped data
  2. Write values to the top-left cell of each range before merging
  3. Apply the merge using ws.merge_cells()
  4. Apply formatting (font, alignment, borders) to the top-left cell
  5. Verify by checking that only the top-left cell holds the value

Additional Guidelines

For Multiple Merged Regions

# Define all merges with their values
merges = [
    ('A1', 'D1', 'Quarterly Revenue Report'),
    ('A3', 'B3', 'Product'),
    ('C3', 'D3', 'Sales Data'),
]

for start_col, end_col, value in merges:
    cell_ref = f'{start_col}'  # Top-left cell
    ws[cell_ref] = value       # Set value first
    ws.merge_cells(f'{start_col}:{end_col}')  # Then merge

When Modifying Existing Merged Cells

If you need to update a value in an already-merged range:

# Get the top-left cell of the merged range
top_left = 'A1'  # Know your merge structure
ws[top_left] = 'New Value'  # Only modify the top-left cell

Checking for Merged Cells

# Check if a cell is within a merged range
def is_cell_merged(ws, cell_ref):
    for merged_range in ws.merged_cells.ranges:
        if cell_ref in merged_range:
            return True
    return False

# Or check before writing
if not is_cell_merged(ws, 'A1'):
    ws['A1'] = 'Value'
    ws.merge_cells('A1:D1')

Common Use Cases

Use Case Pattern
Title headers Write to A1, then merge A1:D1
Section headers Write to first cell, then merge across columns
Grouped labels Write to top-left, merge the group range
Centered content Write, merge, then apply center alignment

Quick Reference

# ✅ DO: Value → Merge → Format
ws['A1'] = 'Title'
ws.merge_cells('A1:E1')
ws['A1'].alignment = Alignment(horizontal='center')

# ❌ DON'T: Merge → Value
ws.merge_cells('A1:E1')
ws['A1'] = 'Title'  # Error!

Testing Your Spreadsheet

After creation, verify merged cells work correctly:

# Save and reload to confirm no errors
wb.save('test.xlsx')

# Reload and check
wb2 = load_workbook('test.xlsx')
ws2 = wb2.active
print(ws2['A1'].value)  # Should show the title value

04 同仓库更多 Skills

UF-gzj
UF-gzj/openspace-claude-evolution

write-special-chars-ts-check

Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, plus a reliable TypeScript type-checking step that filters output to only the newly-written files to avoid being misled by pre-existing errors.

★ 0
UF-gzj
UF-gzj/openspace-claude-evolution

write-special-chars-readback

Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, with mandatory post-write verification via read_file and cleanup of /tmp helper scripts.

★ 0
UF-gzj
UF-gzj/openspace-claude-evolution

write-special-chars-heredoc

Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) by using a Python heredoc script executed via shell.

★ 0
UF-gzj
UF-gzj/openspace-claude-evolution

worldmonitor-reference

Curated architecture index of the WorldMonitor open-source dashboard. Reference for extracting patterns — vanilla TypeScript, Panel class hierarchy, service layer, CSS grid, API edge functions, refresh scheduler, and 60+ data source integrations.

数据分析师
★ 0
UF-gzj
UF-gzj/openspace-claude-evolution

virtual-list

Implement efficient virtual scrolling for rendering large lists with DOM recycling, chunk-based rendering, and performance optimizations

★ 0
UF-gzj
UF-gzj/openspace-claude-evolution

verify-directory-structure

Diagnose and resolve file access issues by first verifying the directory structure.

★ 0