A spreadsheet powerhouse that does more than you'd expect. It generates Excel files from scratch with formulas, charts, and pivot tables, but also pulls live data directly from the web without needing separate search tools. You can throw CSV, PDF, or even images at it and get structured tables back. The workflow runs async in the background since tasks can take 5-25 minutes, and you poll a log file every 60 seconds to track progress. It supports multi-turn sessions so you can iterate on the same workbook. One quirk: you must pass user queries verbatim to the backend without rewording them. The skill handles financial modeling, data cleaning, and format conversion, and it works in 16 languages. Requires a Skywork API key.
npx -y skills add skyworkai/skywork-skills --skill "Skywork Excel" --agent claude-codeInstalls into .claude/skills of the current project.
Generate professional Excel files and data analysis reports using the Skywork Excel backend service.
This skill requires a SKYWORK_API_KEY to be configured in OpenClaw.
If you don't have an API key yet, please visit: https://skywork.ai
For detailed setup instructions, see: references/apikey-fetch.md
read tool on user-provided files (Excel, PDF, CSV, images, etc.). Pass file paths via --files and let the backend handle reading.[Current time: 2026-03-14] User request: .../Users/xxx/report.xlsx → report.xlsx)Excel tasks take 5-25 minutes. Run the script in background and poll the log every 60 seconds.
EXCEL_LOG=/tmp/excel_$(date +%s).log
python3 scripts/excel_api_client.py "user's query" \
--files "/path/to/file1.xlsx" "/path/to/file2.pdf" \
--language zh-CN \
--log-path "$EXCEL_LOG" \
> /dev/null 2>&1 &
echo "Task started. Log: $EXCEL_LOG"
--files: Upload user-provided files (Excel, CSV, PDF, Image). Omit if no files.--language: zh-CN (default) or en-US — match the user's language.--session <id>: For follow-up tasks — see Multi-Turn Sessions.Execution pattern (required):
EXCEL_LOG path from the output.$EXCEL_LOG does not persist between exec calls — Step 2 MUST recover the path (see monitor command below).Rules — no exceptions:
tail -50, etc.) or summarize/interpret it.❌, Missing parameter, heartbeat pings, etc.) — the agent retries automatically.Every 60 seconds, run:
# Recover log path: use the path printed by Step 1, or find the most recent log
EXCEL_LOG=$(ls -t /tmp/excel_*.log 2>/dev/null | head -1)
if [ -z "$EXCEL_LOG" ] || [ ! -f "$EXCEL_LOG" ]; then
echo "ERROR: Log not found. Ensure Step 1 ran with --log-path."; exit 1
fi
sleep 60
echo "=== Progress Update ==="
grep -A8 "TASK PROGRESS UPDATE" "$EXCEL_LOG" | tail -10
grep -E "\[HEARTBEAT\]" "$EXCEL_LOG" | tail -1
grep -E "\[DONE\]|All done" "$EXCEL_LOG" | tail -1
CRITICAL: Output ONLY the current status. Do NOT repeat or accumulate previous status messages. Each update should be a single, fresh line.
After each log read, output ONLY ONE LINE showing the current status:
[Main stage] | [current action] | Elapsed: Xs
Example (output only this single line, nothing else):
Data Processing | Generating charts | Elapsed: 120s
| Progress contains | Main stage |
|---|---|
| "读取" / "read" / "load" | Loading data |
| "分析" / "analysis" | Data analysis |
| "图表" / "chart" / "visualization" | Generating charts |
| "Excel" / "xlsx" | Creating Excel file |
| "HTML" / "报告" / "report" | Generating report |
| "保存" / "save" / "output" | Saving output |
Stop polling when log contains [DONE] or ✅ All done! → read final output:
tail -30 "$EXCEL_LOG"
exec again after 60 seconds with the same monitor command.exec every 60 seconds until [DONE] or All done appears.After completion, provide the user with both:
Example reply:
✅ Report generated!
📥 Download: https://picture-search.skywork.ai/skills/upload/2026-03-14/xxx.xlsx
💾 Local: /Users/xxx/.openclaw/workspace/report.xlsx
Do NOT use sandbox:// or [filename](sandbox://...) format — these are not clickable. If oss_url is unavailable, provide the local path only.
To continue a previous task, use --session with the ID printed at the end of the previous run:
# First turn — no --session needed; session ID is printed at end
python3 scripts/excel_api_client.py "Create a sales report" \
--language zh-CN --log-path "$EXCEL_LOG" > /dev/null 2>&1 &
# Output: 💡 To continue this conversation, use: --session abc123def456
# Follow-up turn — add --session
python3 scripts/excel_api_client.py "Add a pie chart" \
--session abc123def456 \
--language zh-CN --log-path "$EXCEL_LOG" > /dev/null 2>&1 &
When to use --session: User says "continue", "modify", "add a chart", "change colors", "based on the previous...", or references prior output.
⛔ Without --session, the agent starts fresh and loses all previous context.
| Error | Solution |
|---|---|
Unauthorized (401) | SKYWORK_API_KEY is missing, invalid, or expired — set or rotate the key in OpenClaw skill env |
Connection timeout | Use --timeout 1500 for complex tasks (default: 900s) |
Agent produces wrong output | Be more specific; use multi-turn to refine iteratively |
| Insufficient benefit | See below |
Script output may show: Insufficient benefit. Please upgrade your account at {url}
Reply in the user's language:
[Upgrade now →](url) (or equivalent in user's language)at https://... part of the log outputSKYWORK_API_KEY to version controlenv or as an environment variablelarksuite/cli
googleworkspace/cli
googleworkspace/cli
googleworkspace/cli