用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/HKUDS/OpenSpace --skill openpyxl-merged-cell-safe-write命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | openpyxl-merged-cell-safe-write |
| description | Safe pattern for writing values to merged cells in openpyxl spreadsheets |
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.
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.
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')
# WRONG: Merge first, then assign value
ws.merge_cells('A1:D1')
ws['A1'] = 'Quarterly Revenue Report' # This raises MergedCell error!
ws.merge_cells()# 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
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
# 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')
| 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 |
# ✅ 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!
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