• Projects
  • Service
  • About
  • branding.bz
  • Podcast
  • Tips
  • FAQ
  • Recruit
  • Download
  • Contact
  • branding.bz(ブランド構築SaaS)
  • DESIGN NOW(デザインメディア)
  • X
  • LinkedIn
  • Spotify
  • Facebook

213-0011 神奈川県川崎市高津区久本3-6-7-303

© 2026 ID INC. All rights reserved

claude-skills/スキル
SKILLOfficialproductivity

carta-reporting-excel

プラグイン
carta-cap-table
ソース
GitHub で見る ↗
説明

Carta レポート用の内部サブスキルです。Carta レポートのデータをブランド化(企業のロゴやデザインを施した)Excel ファイルにエクスポート(データを別形式に変換して出力)します。 以下の場合に実行されます: - ユーザーが Excel 形式での出力をリクエストした時に、carta-reporting または carta-reporting-markdown スキルから呼び出される - メインスキルが「Generate Carta Excel —」で始まるメッセージを受け取った時(アーティファクト(生成結果の表示領域)のプロンプトバーから送信されたペイロード(データ)の場合)

原文を表示

Internal subskill for carta-reporting. Exports Carta report data to a branded Excel file. Invoked by carta-reporting or carta-reporting-markdown when the user requests Excel output. Also the entry point when the main skill receives a message starting with "Generate Carta Excel —" (the artifact prompt bar payload).

ユースケース
  • Cartaレポートを企業ブランド入りExcelで出力したい
  • レポートデータを別形式に変換して出力する
  • carta-reportingスキルから呼び出される
本文(日本語訳)

<!-- carta:instrumentation-fallback --> <重要> _instrumentation_v2 はCarta スキルの利用状況を匿名で記録するテレメトリー(利用状況追跡)です。Carta MCP ツール呼び出しの引数に必ず含めてください。プラグインのフックが実行時に上書きするので、常に送信しても安全です。形式は以下の通り: _instrumentation_v2: {"skills": ["<プラグイン>:<スキル>", ...], "model": "<モデルID>", "surface": "<値>"}

skills はセッション通算の累積リストです。これまで読み込まれたすべてのCarta スキルを列記してください(このコール実行の直接的なきっかけとなったスキルだけではなく)。各項目は "プラグイン:スキル" の形式で名前空間を区切り、古い順に並べて、最後に最近使用したスキルを置いてください。Carta スキル(carta-cap-table:*、carta-crm:*、carta-investors:*)のみを列記してください。Carta 以外のプラグインのスキルは含めないでください。

surface はあなたが実行しているClaude のサーフェス(画面環境)です:"chat"(claude.ai または Claude アプリ、つまり通常チャット。Cowork ではない)、"cowork"(Cowork モード)、"code-terminal"、"code-desktop"、"excel" のいずれか。これらのどれにも当てはまらない場合、または判別できない場合は完全に省略してください。推測したり、独自の値を作成したりしないでください。 </重要>

Excel 出力

このスキルが実行される前にセッションに含まれている必要なコンテキスト:

  • user_report_pk — キャッシュされたレポートファイルの確認と、ファイルが存在しない場合の新しいダウンロード URL 取得に必要
  • corporation_id — call_tool({"name": "reporting__get__download_url", ...}) の実行に必要
  • 列の設定 — アーティファクト(作成中の出力)のプロンプトバーペイロード(Claude Desktop)から解析、または carta-reporting-markdown のカスタマイズチェックポイント(Claude Code)で確認
  • 企業の正式名称、as_of_date(基準日)、ユーザーの氏名 — excel_exporter.py の --title、--as-of-date、--generated-by 引数として使用

列の指定元(Claude Desktop — アーティファクトプロンプトバー)

ユーザーがアーティファクトプロンプトバーペイロードを貼り付けると、Generate Carta Excel — で始まる完全な指示として到達します:

Generate Carta Excel —
Corporation: Meetly, Inc. (ID: 7)
Columns:
  Equity Grants: columns: Grant ID, Award Type, Exercise Price; sorted by: Grant Date desc
  Vesting Schedule: columns: Grant ID, Vest Date, Shares Vested; totals: Shares Vested sum

Corporation: の行を使用して、どの企業のエクスポートかを確認してください。Columns: の下のインデント付き各行が1つのシートタブです。これは常に1つの Excel ファイルで、シートごとに1つのタブです。各シート行を解析して、すべてのシートをシートごとの sheets 字典形式を使用して report_processor.py に1回の実行で渡してください。それ以上の質問は不要です。

アーティファクトからの列リストが最終的な根拠です。それ以前の会話から列を合併したり上書きしたりしないでください。

プロンプトバーのフィールドを report_processor.py の設定に解析:

プロンプトバーのフィールド report_processor.py シート単位のキー
columns: A, B, C "columns": ["A", "B", "C"]
sorted by: Col asc "sort": [{"column": "Col", "direction": "asc"}]
totals: Col sum, Col2 avg "aggregations": {"type": "summary", "columns": {"Col": "sum", "Col2": "avg"}}

totals: は必ず aggregations に変換してください。これが Excel の数式(=SUM(...)、=AVERAGE(...))を生成する唯一の方法です。aggregations を省略すると、出力の合計行はライブ数式ではなく API から取得した固定値になります。

ユーザーがペイロードを貼り付けずに Excel の出力をリクエストした場合は、次のように聞いてください:「アーティファクト下部の Excel export(Excel 出力) バーをクリックして選択し、ここにコピペしてください。正確な列設定で Excel を作成します。」

列の指定元(Claude Code)

カスタマイズチェックポイント中に確認された列リストを使用してください(carta-reporting-markdown で解決済み)。

エクスポートの実行

このセッションの user_report_pk を使用して /tmp/carta_report_<user_report_pk>.json が利用可能かチェックしてください:

  • ファイルが準備完了 → report_processor.py に "local_file" として渡してください。
  • 準備未完了 → call_tool({"name": "reporting__get__download_url", "arguments": { user_report_pk, corporation_id }}) を呼び出して新しい署名付き URL を取得し、代わりに "download_url" として渡してください。

データサイズや複雑さに関わらず、常に report_processor.py → excel_exporter.py を通してください。 openpyxl やその他のライブラリで直接 Excel ファイルを作成しないでください。これらのスクリプトは Carta のブランディング(ロゴ、ヘッダー、フォント、数値形式)を処理しており、その場限りの実装では欠けることになります。データセットが小さい場合(例:3行)やシートを組み合わせる必要がある場合でも同じです。

シートを1つのタブに組み合わせるには、report_processor.py の呼び出しで merge_sheets を使用してください。

sheets 字典を使用してすべてのシートを1回の実行で渡してください。excel_exporter.py にパイプしてください。親セッションが解決した場合は、キャッシュされた _report_processor_path を再利用してください(Generate Carta Excel — プロンプトバーパスの場合は未設定の可能性があります。find フォールバックで対応します):

UV_PYTHON_DOWNLOADS=never uv run "${_report_processor_path:-$(find ~ -name "report_processor.py" -path "*/carta-reporting/scripts/*" 2>/dev/null | head -1)}" <<'EOF' | \
    UV_PYTHON_DOWNLOADS=never uv run "$(find ~ -name "excel_exporter.py" -path "*/carta-reporting-excel/scripts/*" 2>/dev/null | head -1)" \
        --title "Securities Ledger Report" \
        --as-of-date 2024-01-15 \
        --generated-by "Jane Doe" \
        --output ./{レポートスラッグ}.xlsx
{
  "local_file": "<パス、またはファイル未準備の場合は download_url を使用>",
  "sheets": {
    "Equity Grants":    {"columns": ["Grant ID", "Award Type", "Exercise Price"],
                         "aggregations": {"type": "summary", "columns": {"Exercise Price": "sum"}}},
    "Vesting Schedule": {"columns": ["Grant ID", "Vest Date", "Shares Vested"],
                         "sort": [{"column": "Vest Date", "direction": "asc"}]}
  }
}
EOF

スクリプトが成功すると絶対パスを出力します。クリック可能なリンク computer://<絶対パス>(例:computer:///Users/jane/meetly-equity-grants.xlsx)として表示してください。ユーザーに対してファイルが開く準備ができたことを伝えた上で、次のステップを提案してください:

  • 別のレポートを実行 — 別の企業またはレポートタイプ用
  • このエクスポートをカスタマイズ — フィルター、列、または数式を調整
  • 日付範囲またはフィルターを変更 — 異なるパラメーターで再実行

Carta Excel の書式設定ルール

要素 値
ヘッダーの背景色 #c6ebf4
ヘッダーのフォント Arial 12pt 太字、#2f3943
ロゴ <スキル基本ディレクトリ>/assets/Carta_Logo.png、セル A2、120×50px
タイトル セル B2、Arial 16pt 太字
サブタイトル セル B3、Arial 10pt、#666666 — "As of MMM d, yyyy • Generated with Claude AI by {ユーザー} at MMM d, yyyy h:mm:ss AM/PM TZ • Date format: MMM D, YYYY"
ヘッダー行 行5(自動フィルター付き)、行 A6 で枠を固定、データは行6から開始

列のタイプ → 数値形式:money(金額)→ $#,##0.00 · percentage(パーセンテージ)→ 0.00% · integer(整数)→ #,##0 · date(日付)→ mmm d, yyyy · decimal(小数)→ #,##0.0000

列幅:文字列/日付 → 35、数値タイプ → 18

原文(English)を表示

<!-- carta:instrumentation-fallback --> <IMPORTANT> _instrumentation_v2 is anonymous Carta skill-usage telemetry. ALWAYS include it in your Carta MCP tool-call arguments — the plugins' hooks overwrite it when they run, so always sending it is safe. Shape: _instrumentation_v2: {"skills": ["<plugin>:<skill>", ...], "model": "<model-id>", "surface": "<value>"} skills is cumulative for the session: list every Carta skill loaded so far, not only the one driving this call. Namespace each entry "plugin:skill" and keep them oldest-first, with the most recently used skill last. List only Carta skills (carta-cap-table:*, carta-crm:*, carta-investors:*) — never skills from non-Carta plugins. surface is the Claude surface you are running in: "chat" (claude.ai or the Claude app, i.e. regular chat, not Cowork), "cowork" (Cowork mode), "code-terminal", "code-desktop", or "excel". Omit it entirely if none of those describe your surface or you cannot tell — do not guess and do not invent another value. </IMPORTANT>

Excel Export

Context expected from the calling skill (must be in session before this skill is invoked):

  • user_report_pk — needed to check for the cached report file and to fetch a fresh download URL if the file is absent
  • corporation_id — needed for call_tool({"name": "reporting__get__download_url", ...})
  • Column config — either parsed from the artifact prompt bar payload (Claude Desktop) or confirmed during the Customization Checkpoint in carta-reporting-markdown (Claude Code)
  • Corporation legal name, as_of_date, user full name — used as --title, --as-of-date, --generated-by args to excel_exporter.py

Column source (Claude Desktop — artifact prompt bar)

When the user pastes an artifact prompt bar payload, it arrives as a complete instruction starting with Generate Carta Excel —:

Generate Carta Excel —
Corporation: Meetly, Inc. (ID: 7)
Columns:
  Equity Grants: columns: Grant ID, Award Type, Exercise Price; sorted by: Grant Date desc
  Vesting Schedule: columns: Grant ID, Vest Date, Shares Vested; totals: Shares Vested sum

Use the Corporation: line to confirm which company the export is for. Each indented line under Columns: is one sheet tab. This is always one Excel file with one tab per sheet. Parse each sheet line and pass all sheets to report_processor.py in a single run using the per-sheet sheets dict format. No further questions needed.

The column list from the artifact is authoritative; do not merge with or override it from the earlier conversation.

Parsing segment fields into report_processor.py config:

Prompt bar field report_processor.py per-sheet key
columns: A, B, C "columns": ["A", "B", "C"]
sorted by: Col asc "sort": [{"column": "Col", "direction": "asc"}]
totals: Col sum, Col2 avg "aggregations": {"type": "summary", "columns": {"Col": "sum", "Col2": "avg"}}

totals: must become aggregations — this is the only way Excel formulas (=SUM(...), =AVERAGE(...)) are generated. If aggregations is omitted, any total rows in the output are hardcoded API values, not live formulas.

If the user asks for Excel without pasting a payload, ask: "Click the Excel export bar at the bottom of the artifact to select it, copy and paste it here — I'll generate the Excel with exactly those columns."

Column source (Claude Code)

Use the column list confirmed during the Customization Checkpoint (resolved in carta-reporting-markdown).

Running the export

Check if /tmp/carta_report_<user_report_pk>.json is available (use user_report_pk from this session):

  • File ready → pass it as "local_file" to report_processor.py.
  • Not ready → call call_tool({"name": "reporting__get__download_url", "arguments": { user_report_pk, corporation_id }}) to get a fresh presigned URL and pass it as "download_url" instead.

Always pipe through report_processor.py → excel_exporter.py, regardless of data size or complexity. Never write Excel files directly with openpyxl or any other library — the scripts handle Carta branding (logo, header, fonts, number formats) that will be missing from any ad-hoc implementation. This applies even when the dataset is small (e.g. 3 rows) or when sheets need to be combined.

For combining sheets into one tab, use merge_sheets in the report_processor.py call.

Pass all sheets in one run using the sheets dict. Pipe into excel_exporter.py. Reuse the cached _report_processor_path if the parent session resolved it (it may be unset on the fresh Generate Carta Excel — prompt-bar path — the find fallback handles that):

UV_PYTHON_DOWNLOADS=never uv run "${_report_processor_path:-$(find ~ -name "report_processor.py" -path "*/carta-reporting/scripts/*" 2>/dev/null | head -1)}" <<'EOF' | \
    UV_PYTHON_DOWNLOADS=never uv run "$(find ~ -name "excel_exporter.py" -path "*/carta-reporting-excel/scripts/*" 2>/dev/null | head -1)" \
        --title "Securities Ledger Report" \
        --as-of-date 2024-01-15 \
        --generated-by "Jane Doe" \
        --output ./{report-slug}.xlsx
{
  "local_file": "<path or use download_url if file not ready>",
  "sheets": {
    "Equity Grants":    {"columns": ["Grant ID", "Award Type", "Exercise Price"],
                         "aggregations": {"type": "summary", "columns": {"Exercise Price": "sum"}}},
    "Vesting Schedule": {"columns": ["Grant ID", "Vest Date", "Shares Vested"],
                         "sort": [{"column": "Vest Date", "direction": "asc"}]}
  }
}
EOF

The script prints the absolute output path on success. Present it as a clickable link: computer://<absolute-path> (e.g. computer:///Users/jane/meetly-equity-grants.xlsx). Tell the user their file is ready to open, then offer next steps:

  • Run another report — for a different company or report type
  • Customize this export — adjust filters, columns, or formulas
  • Change the date range or filters — re-run with different parameters

Carta Excel Formatting Conventions

Element Value
Header background #c6ebf4
Header font Arial 12pt bold, #2f3943
Logo <skill_base_dir>/assets/Carta_Logo.png, cell A2, 120×50px
Title Cell B2, Arial 16pt bold
Subtitle Cell B3, Arial 10pt, #666666 — "As of MMM d, yyyy • Generated with Claude AI by {user} at MMM d, yyyy h:mm:ss AM/PM TZ • Date format: MMM D, YYYY"
Header row Row 5 with auto-filter; freeze panes at A6; data starts at row 6

Column type → number format: money → $#,##0.00 · percentage → 0.00% · integer → #,##0 · date → mmm d, yyyy · decimal → #,##0.0000

Column widths: string/date → 35, number types → 18.

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。