上市公司重大訊息公告:如何合併244筆資料
上市公司重大訊息公告是最即時的財務資訊,不過資料量大且多樣,要讓 AI 幫忙分析,必須先整合成 AI 可讀的文件格式。本文示範如何向 Gemini 提問,生成 Apps Script程式代碼,把 244 筆資料從 Google 試算表合併為 Google 文件。


✨ 贊贊小屋精華筆記:244筆重大訊息的大量資料合併術 ✨
嗨!歡迎來到小屋的數位學習時光 👋 相信大家在處理密密麻麻的試算表時常常看到頭暈。今天小白老師要帶大家用輕鬆溫暖的節奏,將證交所的 244 筆重大訊息,透過 Gemini 與 Apps Script 完美融合成一份 AI 超愛讀的漂亮文件,把繁雜的工作變療癒!
🌱 為什麼不直接給 AI 看試算表?
試算表很適合儲存與篩選,但格子內的多行說明與換行對 AI 來說非常混亂。比較穩定的做法是先用程式把 244筆重訊資料 轉成固定格式的文字。這就像幫 AI 準備好一份乾淨的「影劇大補帖」,後續的分析才會又快又精準!
💡 與 AI 協作秘訣:先求有、再追加
和 AI 合作寫 Apps Script 程式時,最有效率的節奏是:先取得第一版、再針對現場狀況追加需求。一開始先讓 Gemini 生成基礎的文件寫入功能,架構確認可行後,再貼上原有程式碼請它做「保留舊功能」的合併任務,這樣最不容易出錯!
🔄 功能完美整合,選單自訂不打架
原本已經有抓取功能程式的人要注意囉!若各寫各的選單函數會互相覆蓋。正確做法是把「抓取重訊」與「生成文件」打包掛在同一個自訂選單下。
小屋貼心提醒: 貼上程式後,可以先在 Apps Script 編輯器上方下拉選單直接執行核心函數進行「健康檢查」,可以幫你快速釐清是程式有問題還是選單沒刷新喔!
🔐 第一次見面的 Google 授權安全鎖
首次執行會跳出「未經 Google 驗證」的驚嘆號提示,請別擔心!這是正常的安全機制。只要確認這段程式碼是自己請 Gemini 撰寫、用途明確且在個人帳號內執行,就可以放心點選進階並同意授權。這個流程只需要走一次,以後就能一鍵優雅地在背景執行了。
🚀 漂亮有層次的合併結果與下一步
大功告成!雲端硬碟會出現一份帶有日期戳記的 Google Docs。打開會發現左側貼心地產生了 文件導覽分頁,點擊就能快速跳转特定條目。正文以清晰的兩欄表格呈現,原本儲存格內擠成一團的換行多行序列也被完美還原了!
✨ 未來的智慧想像: 這份乾淨的文件是絕佳的中繼稿,下一步就能直接交給 AI 進行重訊分類、歸納股價影響邏輯,再把初步判斷結果自動寫回原本的試算表。打造智慧財經大腦,就是這麼有儀式感!
一、上市公司重大訊息公告匯出需求
延續證交所 OpenAPI的抓取實作,試算表「上市公司重大訊息」的「上市公司每日重訊」工作表已存有 244 筆公告資料,欄位涵蓋抓取時間、出表日期、發言日期、發言時間、公司代號、公司名稱、符合條款、事實發生日以及說明,A 到 J 欄完整呈現每一筆透過證交所 OpenAPI 取得的原始公告內容。有了這份試算表做為基礎,贊贊小屋打開 Gemini,附上截圖並說明需求:
「我有一個 Google 試算表,A 到 J 欄很多筆資料,希望設計 Apps Script 生成文件,把這些資料一筆一筆依序寫入。」
這一步的重點不是急著請 AI 判斷哪一則公告重要,而是先把資料整理成 AI 容易閱讀的格式。試算表很適合儲存與篩選資料,但對 AI 來說,欄位、列號、多行說明與換行內容如果沒有整理,很容易造成判讀混亂。比較穩定的做法是先用程式把每一筆重大訊息轉成固定格式的文字資料,讓後續分析建立在乾淨的來源稿上。試算表中的符合條款欄位對應的正是重大訊息法規的 51 項條款,把這些欄位完整保留在文件中,AI 分析時才有足夠的上下文可以判斷。



二、Gemini 回覆的程式碼架構說明
Gemini 接收到需求後,產出了一段完整的 JavaScript 程式碼。程式碼的入口是 generateDocFromSheet 函數,開頭兩行 SpreadsheetApp.getActiveSpreadsheet() 與 ss.getActiveSheet() 負責取得當前試算表與工作表,Gemini 說明操作入口:到試算表點選「擴充功能」>「Apps Script」,清空原有程式碼後貼上。程式最後分別呼叫 doc.saveAndClose() 儲存文件、Logger.log 輸出連結,以及 SpreadsheetApp.getUi().alert() 跳出視窗通知使用者。另一段 onOpen 函數則負責在試算表上方建立「重大訊息工具」自訂選單,加入「生成 Word 文件」按鈕讓使用者觸發主程式,不過實際產出的檔案是 Google Docs 文件。
從 Gemini 的回覆可以看出,AI 寫程式時不是只產生一段孤立程式碼,而是把任務拆成幾個功能區塊:讀取試算表、建立文件、逐列寫入內容、儲存文件、加入自訂選單。這種結構化拆解很重要,日後要修改功能時才知道應該調整哪一段,例如想改文件標題就找文件建立區塊,想改選單文字就找 onOpen 函數。Google Apps Script 的標準設計模式就是如此:generateDocFromSheet 負責業務邏輯,onOpen 負責在試算表開啟時把自訂選單注入介面,兩層分開,擴充時互不干擾。



三、貼上程式碼後的執行步驟
確認程式碼架構後,Gemini 接著說明使用與執行步驟:將程式碼貼入 Apps Script 編輯器後點選「儲存」圖示、回到試算表重新整理(F5)讓選單出現、點選「重大訊息工具」>「生成 Word 文件」執行,首次執行 Google 會要求授權驗證。Gemini 也在程式碼貼心設計說明中補充了三個設計概念:程式碼自動對齊欄位、能完整保留換行格式寫入文件、欄位名稱自動加粗讓排版看起來像報告。看到這些說明,贊贊小屋意識到試算表的 Apps Script 裡已有一段原本負責從證交所 OpenAPI 抓取上市公司每日重訊的 onOpen 程式,也就是先前在公開資訊觀測站重大訊息查詢教學中整合的功能,直接覆蓋會把舊功能蓋掉,因此繼續在 Gemini 下方追加提示:
「1. 資料所在工作表名稱為「上市公司每日重訊」。2. 目前 Apps Script 中已有程式碼如下,希望能保留:function onOpen() { SpreadsheetApp.getUi().createMenu(‘重大訊息工具’)…」
「先取得第一版、再針對現場狀況追加需求」是和 AI 協作寫程式時很有效率的節奏。確認第一版的結構可行,才進行下一步提問,能精確定位問題出在新需求還是舊程式碼。這次追加「保留原有功能」的需求,本質上是一個合併任務,只要在提問中明確列出已有程式碼和希望新增的功能,Gemini 通常能直接輸出整合版,不需要手動合併兩段程式碼,大幅降低出錯機率。



四、整合原有功能的完整程式碼
Gemini 根據追加提示,說明要保留原本透過 OpenAPI 抓取資料的完整功能,並在選單中多增加一個功能鍵,點擊後會自動讀取工作表「上市公司每日重訊」中的所有資料,依序寫入新生成的 Google 文件中。整合後的 onOpen 函數同時包含 addItem(‘抓取上市公司每日重訊’, ‘fetchTwseDailyMaterialInfo’) 與 addItem(‘生成重訊 Word 文件’, ‘generateDocFromSheet’) 兩個選項,掛在同一個 createMenu(‘重大訊息工具’) 下。Gemini 另外整理了本次更新重點:原功能不受影響,選單新增按鈕,程式碼優化了排版邏輯,自動把公司代號、公司名稱抽出來做大字體標題,並將主旨置頂加粗,說明欄的多行序列也能完整分行收納在表格中。
這次更新中最值得注意的設計是 onOpen 的整合方式。Google Sheets 開啟時只會依照程式中的 onOpen 建立自訂選單,如果新舊程式各自寫一個 onOpen,很容易互相覆蓋,最後只剩其中一個選單項目。正確做法是把兩個功能都放在同一個 createMenu 裡,讓它們成為同一套工具的兩個按鈕,這也是這次整合任務最關鍵的一步。此外,說明欄的換行處理是個容易忽略的細節,說明欄那種包含「1. 董事會…2. 重要決議…」多行序列的文字,若沒有特別處理,Google Sheets 儲存格內的換行符號直接寫入文件時整段會擠成一行,Gemini 的程式碼在此把內容拆行後逐段寫入,才能正確還原多行格式。



五、Apps Script 編輯器確認函數
把整合後的程式碼貼入 Apps Script 編輯器並儲存後,點開編輯器上方「執行」按鈕旁的函數下拉選單,畫面可以看到三個函數:onOpen、fetchTwseDailyMaterialInfo、generateDocFromSheet,代表三段程式都已被系統正確辨識載入。確認無誤後切換回試算表,點選上方選單列,「重大訊息工具」選項已出現,展開後有「抓取上市公司每日重訊」與「生成重訊 Word 文件」兩個按鈕並列,新舊功能整合成功。
Apps Script 編輯器的函數下拉選單是一個容易被忽略的除錯工具,列出了當前檔案中所有可執行的頂層函數,方便直接點選執行單一函數,不必每次都從試算表選單觸發,執行結果也會顯示在編輯器下方的「執行記錄」面板中。養成習慣在貼入新程式碼後,先在編輯器直接執行一次核心函數確認無報錯,再回到試算表測試選單按鈕,可以快速區分「是程式有問題」還是「是選單沒有刷新」這兩種不同狀況。值得注意的是,如果是第一次執行,直接在編輯器執行核心函數同樣會觸發授權流程,並非只有從試算表按鈕才會觸發,這是正常現象。在此也可以看到,這段臺灣證券交易所 OpenAPI 的呼叫邏輯原封不動保留在 fetchTwseDailyMaterialInfo 函數中,原有功能確實完整保留。



六、首次執行通過 Google 授權流程
第一次點選「生成重訊 Word 文件」後,試算表畫面跳出「需要授權」的提示框,說明「這份文件附加的指令碼需要你的同意才能執行」,點選「確定」繼續。接著畫面轉到「這個應用程式未經 Google 驗證」的警告頁,標示出這段腳本的擁有者帳號(也就是自己的 Google 帳號),說明在向 Google 驗證之前請勿使用,下方有「除非您瞭解相關風險並信任開發人員,否則請勿繼續操作」的提示,以及「前往『上市公司重大訊息』(不安全)」的連結可以點選。
點選連結後進入 OAuth 同意畫面,說明授予存取權後將可查看、編輯、建立及刪除所有 Google 文件檔案,並提示「確認『上市公司重大訊息』是您信任的應用程式」,確認後點選「繼續」,授權流程就此完成,程式隨即開始執行。
「這個應用程式未經 Google 驗證」的警告常讓第一次看到的人猶豫,但這是 Google 為了保護帳號安全設計的 OAuth 授權機制,任何會跨服務讀取資料並在雲端硬碟建立文件的 Apps Script,初次執行都必須過這三道關卡。OAuth 畫面上「查看、編輯、建立及刪除」是 Google 以服務權限範圍呈現的標準授權文字,代表這段程式具備操作 Google 文件的能力,不代表程式一定會刪除文件。判斷信任來源的原則很簡單:程式碼是自己請 Gemini 撰寫、用途明確、只在個人帳號內執行,而且已確認程式內容沒有寄送資料到陌生網址或刪除檔案等危險動作,才比較適合繼續授權。這個授權流程只需要完成一次,之後每次點選按鈕就能直接在背景執行。




七、上市公司重大訊息公告244筆合併結果
上市公司重大訊息公告的文件生成成功後,試算表上方出現「正在執行指令碼」的提示列,隨即彈出視窗顯示「文件已成功生成!請至您的 Google 雲端硬碟查看新文件:上市公司重大訊息匯整報告_20260527」,點選確定關閉視窗。
打開 Google 雲端硬碟,「我的雲端硬碟」首頁同時列出試算表「上市公司重大訊息」與剛生成的文件「上市公司重大訊息匯整報告_20260527」,兩個檔案並存清楚可辨。點開 Google Docs,標題是「上市公司重大訊息明細報告」,報告生成時間自動帶入,左側文件分頁以「項目編號:[公司代號] 公司名稱」的格式列出全部 244 筆條目,點擊即可快速跳轉,正文以兩欄表格呈現每一筆資料,說明欄的多行內容也完整保留換行格式。
文件名稱帶上日期戳記(如 20260527),是讓雲端硬碟歷史版本保持可追溯的好習慣。若未來每天手動執行一次資料抓取,再按下文件生成按鈕,長期下來就能形成一份按日期命名的公告資料庫,查找特定日期的重大訊息只需按名稱搜尋,比在試算表裡篩選日期欄位更直覺。這份 Google Docs 目前是把試算表資料轉換成 AI 容易閱讀的來源稿,下一步就可以把文件交給 AI 進行分析,請它把 244 筆公告依照類型分類,從股東常會決議、法人說明會到資產減損意思這類對財務影響較大的公告,歸納每一類對股價的潛在影響,再把判斷準則轉成 Apps Script,將初步判斷結果寫回原本試算表。




從試算表資料到 AI 分析來源稿
這次實作走完了從提問到生成文件的完整流程,最有收穫的地方不是程式碼本身,而是示範了 AI 協作的工作節奏:有清楚的資料來源,把試算表截圖附在提示詞裡讓 Gemini 理解欄位結構,請它生成第一版程式碼,確認結構可行,再追加「保留原有功能」的整合需求,最後由人確認授權、執行、看結果。每一步都是人在主導,AI 在接手重複且規則明確的部分。
這次產出的 Google Docs 不是最終投資報告,而是一份中繼來源稿,把試算表中密密麻麻的 244 筆欄位資料轉成 AI 容易閱讀的格式,左側的文件分頁導覽讓公告可以快速跳轉,說明欄的換行格式也完整保留。下一步就是把這份文件交給 AI,請它依照公告類型分類、歸納股價影響邏輯,再把判斷準則轉成 Apps Script,將初步判斷結果寫回原本試算表。
贊贊小屋公開資訊觀測站財報:
歡迎報名贊贊小屋股票投資大全集課程。

相關文章:
