我的好朋友 Claude
Claude + Google Sheets:1 個鐘設定報表自動化(細店 + freelancer 適用)
第 080 期

Claude + Google Sheets:1 個鐘設定報表自動化(細店 + freelancer 適用)

進階·商家
第 080 期|Cowork|老闆、打工仔、創作者|

你每月底花 4 個鐘整銷售報表 —— 拉數、分類、寫摘要、send 老闆。用 Claude + Google Sheets 整合,每月底撳 1 下就跑嗮 —— Claude 讀原始數據、自動分類、出 1 頁摘要。設定 1 個鐘,每月慳 3.5 個鐘。

難度 ★★時間 60 分鐘用具 Claude.ai (Pro+)、Google Sheet(你公司 data)、Apps Script 基本識讀
【編者撰】一個香港人

情境

你係細店老闆。每月 1 號 routine:

4 個鐘月底儀式,每月準時上演。你試過:

呢個問題嘅本質:

呢篇用 Claude + Apps Script 整合,1 個鐘設定,往後每月報表撳 1 下就跑。

⚠️ 呢篇假設你會用 Google Sheets + 識讀基本 JavaScript(Apps Script 就係 JS)。完全唔識 code 嘅,跳去「變化 1」用手動貼嘅做法。

跟住做

1. 準備你 Sheet 結構

打開 Google Sheet,整兩個 tab:

Tab 1:raw-data

貼上月交易入呢個 tab。

Tab 2:monthly-report

2. 拎 Anthropic API key

console.anthropic.com

  1. 註冊 / 登入
  2. Settings → API Keys
  3. Create key → 標籤改做「sheets-integration」
  4. 即刻儲好個 key(只見得到一次)

API 用量係按量收費:1 份每月報表 ≈ HK$0.5-2,月底快速自動化嘅成本好平。

3. 寫 Apps Script

返 Google Sheet → Extensions → Apps Script(開新 editor tab)。

貼呢段 code:

function generateMonthlyReport() {
  const API_KEY = PropertiesService.getScriptProperties().getProperty('ANTHROPIC_API_KEY');
  if (!API_KEY) {
    SpreadsheetApp.getUi().alert('Set ANTHROPIC_API_KEY in Script Properties first');
    return;
  }

  // Read raw data from Tab 1
  const rawSheet = SpreadsheetApp.getActive().getSheetByName('raw-data');
  const data = rawSheet.getDataRange().getValues();
  const headers = data[0];
  const rows = data.slice(1);

  // Convert to text format for Claude
  const dataText = rows.map(row =>
    headers.map((h, i) => `${h}: ${row[i]}`).join(' | ')
  ).join('\n');

  // Build prompt
  const prompt = `你係 monthly sales 報表 analyst. 我嘅 raw transaction data:

${dataText}

請整 1 頁 monthly report. 結構:

📊 **EXECUTIVE SUMMARY (2-3 句)**
- 上月 total revenue
- 1 句 trend (vs typical month)
- 1 個 highlight + 1 個 concern

📈 **REVENUE BREAKDOWN**
- By channel (online / instore / wholesale): amount + % share
- By product category: top 5 amount + % share
- By customer type (new vs returning): split

⚠️ **NOTABLE PATTERN**
- 任何 unusual transaction (refund / large outlier)
- 任何 trend worth flag (specific customer 增加, product 突然 grow)
- 任何 risk signal

🎯 **NEXT MONTH FOCUS (1-2 個 actionable)**
- 具體建議 based on data
- 唔好行貨「improve marketing」

語氣:data-driven, 唔好 fluffy. 出 markdown format.`;

  // Call Anthropic API
  const response = UrlFetchApp.fetch('https://api.anthropic.com/v1/messages', {
    method: 'POST',
    headers: {
      'x-api-key': API_KEY,
      'anthropic-version': '2023-06-01',
      'content-type': 'application/json'
    },
    payload: JSON.stringify({
      model: 'claude-opus-4-7',
      max_tokens: 2000,
      messages: [{ role: 'user', content: prompt }]
    })
  });

  const result = JSON.parse(response.getContentText());
  const reportText = result.content[0].text;

  // Write to Tab 2
  const reportSheet = SpreadsheetApp.getActive().getSheetByName('monthly-report');
  reportSheet.getRange('A3').setValue(reportText);

  SpreadsheetApp.getUi().alert('Report generated! See monthly-report tab.');
}

4. 設定 API key(安全)

Apps Script editor → Project Settings → Script Properties → Add property:

撳 Save。

呢個做法比直接寫死入 code 安全 —— script 唔會經分享 / 匯出而漏咗個 key。

5. 加 menu 按鈕(撳 1 下就跑)

返 Apps Script editor,加多一段 code:

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Monthly Report')
    .addItem('Generate', 'generateMonthlyReport')
    .addToUi();
}

撳 Save。Reload Google Sheet。

你會見到頂部多咗一個 menu「Monthly Report」→「Generate」。撳一次 → 30-60 秒 → 報表出咗。

6. 第一次跑 + 反覆調 prompt

第一次跑 —— 你會發現邊樣輸出唔啱:

每次改完 prompt 再跑,調五次左右 prompt 就會收斂到你要嘅質素。

呢個 1 個鐘設定,往後每月底撳 1 下跑 30-60 秒,慳 3.5 個鐘。1 年慳 42 個鐘。

變化

變化 1:唔識 code —— 手動貼嘅做法

唔使整 Apps Script,每月手動花 5 分鐘貼:

  1. Sheet → File → Download → CSV
  2. 開 CSV → 複製全部交易文字
  3. 開 Claude Project(按第 78 篇設定)
  4. 貼數據 + 一個長駐 prompt:
新一月 transaction. 用 our standard report template (in project knowledge) 生成.
  1. 複製輸出 → 貼入 Sheet 嘅 monthly-report tab

20 分鐘 / 月(對比手動 4 個鐘)。冇設定負擔。

取捨:每月仍要你手動啟動。Apps Script 設定一次就永遠自動。

變化 2:Slack 整合 —— 自動將報告 send 落 channel

加 Slack webhook 整合,每月 1 號 9am 自動啟動 + 將報告 send 落 #monthly-reports channel:

function sendToSlack(reportText) {
  const SLACK_WEBHOOK = PropertiesService.getScriptProperties()
    .getProperty('SLACK_WEBHOOK_URL');

  UrlFetchApp.fetch(SLACK_WEBHOOK, {
    method: 'POST',
    contentType: 'application/json',
    payload: JSON.stringify({
      text: `📊 Monthly Report — ${new Date().toLocaleDateString()}\n\n${reportText}`
    })
  });
}

時間觸發:Apps Script editor → Triggers → Add trigger → generateMonthlyReport → Time-driven → Monthly → Day 1, 9-10am。

每月 1 號自動跑 + send Slack。完全唔使你郁手。

變化 3:擴展去其他報表(每週 / 每季 / 每年)

同樣框架,唔同節奏:

每個節奏開獨立 menu 項目 + 自己嘅 prompt 範本。

進階:出儀表板(Apps Script 都可以基於 Claude 輸出整圖表),同時 send email + Slack。

一個心態

「自動化」呢個詞好容易俾人吹得太大。實際上應該咁睇:自動化嘅划算度唔係計「慳到 100% 時間」,係「慳到重複嗰 80% 時間,留返 20% 判斷畀你」

每月底你 4 個鐘:

呢個設定自動化咗 3.5 個鐘。0.5 個鐘判斷仍然你做 —— 你睇 Claude 出嘅初稿 + 加你自己嘅背景洞察(例如「上月客戶 X 落大單係因為一次活動,唔可持續」)。

換個角度睇:自動化唔係取代你 —— 自動化釋放你嘅判斷時間。

最後提醒:

下個月 1 號試撳 1 下。慳 3.5 個鐘。一路累積落去,12 個月後就睇得出分別。

文中工具 · 連結

睇完想同 Claude 一齊行一次?

撳一撳,就將成段 tutor 指示(連埋成篇文嘅內容)抄入剪貼簿。 貼入 Claude.ai 或 Claude Desktop,佢會用廣東話帶你一步一步行, 每步問你填關鍵位,最後畀返一個專為你情況寫嘅 prompt 帶走。

下期預告 · 相關情境
訂閱本副刊

每週日早上,
一道新菜送到你 inbox。

一篇 use case、一個香港情境、一個跟得到嘅做法。 冇 sell course、冇話你「再唔學就會失業」。

訂閱通道執緊緊
newsletter service 仲未接通。想第一時間收到新文章——
直接 email 我哋寫一句「訂閱」就得。

Email 「訂閱」畀我