Create Excel files with openpyxl by falling back to run_shell with inline Python heredoc when execute_code_sandbox fails
62
72%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./benchmarks/gdpval/skills/excel-heredoc-workaround/SKILL.mdWhen creating Excel files with openpyxl, execute_code_sandbox may fail due to environment issues. This skill provides a robust workaround: fall back to run_shell with inline Python heredoc scripts to create properly formatted spreadsheets with styling.
.xlsx files with openpyxlexecute_code_sandbox fails with openpyxl-related errorsTry creating the Excel file using execute_code_sandbox:
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill
wb = Workbook()
ws = wb.active
ws.title = "Data"
# Add data and styling
ws['A1'] = "Header"
ws['A1'].font = Font(bold=True)
wb.save("output.xlsx")
print("ARTIFACT_PATH:output.xlsx")When execute_code_sandbox fails, switch to run_shell with a Python heredoc:
python3 << 'EOF'
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
# Create workbook
wb = Workbook()
ws = wb.active
ws.title = "Schedule"
# Add headers with styling
headers = ["Task", "Date", "Status", "Priority"]
for col, header in enumerate(headers, 1):
cell = ws.cell(row=1, column=col, value=header)
cell.font = Font(bold=True, size=12)
cell.fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
cell.font = Font(bold=True, color="FFFFFF")
cell.alignment = Alignment(horizontal="center")
# Add data rows
data = [
["Cleanup Zone A", "2024-01-15", "Pending", "High"],
["Cleanup Zone B", "2024-01-16", "Complete", "Medium"],
]
for row_idx, row_data in enumerate(data, 2):
for col_idx, value in enumerate(row_data, 1):
cell = ws.cell(row=row_idx, column=col_idx, value=value)
cell.alignment = Alignment(horizontal="left")
# Adjust column widths
for col in ws.columns:
max_length = 0
column = col[0].column_letter
for cell in col:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
ws.column_dimensions[column].width = max_length + 2
# Save the file
wb.save("Cleanup_Schedule.xlsx")
print("Created Cleanup_Schedule.xlsx successfully")
EOFAfter running the heredoc script, verify the file was created:
ls -lh *.xlsxUse read_file to confirm the Excel file is valid:
read_file with filetype="xlsx", file_path="Cleanup_Schedule.xlsx"| Aspect | execute_code_sandbox | run_shell heredoc |
|---|---|---|
| Reliability | May fail with openpyxl | More stable execution |
| Styling support | Limited | Full openpyxl support |
| File output | Via ARTIFACT_PATH | Direct file write |
| Debugging | Limited output | Full stdout/stderr |
from openpyxl.styles import Font, PatternFill
header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
header_font = Font(bold=True, color="FFFFFF", size=12)
cell = ws.cell(row=1, column=1, value="Header")
cell.fill = header_fill
cell.font = header_fontfrom openpyxl.styles import PatternFill
gray_fill = PatternFill(start_color="D9D9D9", end_color="D9D9D9", fill_type="solid")
for row in range(2, ws.max_row + 1):
if row % 2 == 0:
for col in range(1, ws.max_column + 1):
ws.cell(row=row, column=col).fill = gray_fillfrom openpyxl.styles import Border, Side, Alignment
thin_border = Border(
left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin')
)
for row in ws.iter_rows():
for cell in row:
cell.border = thin_border
cell.alignment = Alignment(horizontal="center", vertical="center")Issue: File not created after heredoc execution
Issue: openpyxl not found
pip install openpyxl before running heredocIssue: Styling not appearing
# Create Excel with full styling
python3 << 'EOF'
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
wb = Workbook()
ws = wb.active
ws.title = "Report"
# Header row
headers = ["ID", "Name", "Value", "Date"]
for col, h in enumerate(headers, 1):
cell = ws.cell(row=1, column=col, value=h)
cell.font = Font(bold=True, color="FFFFFF")
cell.fill = PatternFill(start_color="2F5597", fill_type="solid")
cell.alignment = Alignment(horizontal="center")
# Data
ws.append([1, "Item A", 100, "2024-01-01"])
ws.append([2, "Item B", 200, "2024-01-02"])
# Apply borders
thin = Side(style='thin')
border = Border(left=thin, right=thin, top=thin, bottom=thin)
for row in ws.iter_rows():
for cell in row:
cell.border = border
# Auto-width columns
for col in ws.columns:
col_letter = col[0].column_letter
max_len = max(len(str(cell.value)) if cell.value else 0 for cell in col)
ws.column_dimensions[col_letter].width = min(max_len + 2, 50)
wb.save("Report.xlsx")
print("Success: Report.xlsx created")
EOFc5a9c4b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.