2026年7月18日 星期六

Excel 鬼撞牆?明明資料就在那卻找不到?揭開 MATCH 函數失效的「特殊符號」真相

1. 為何 Excel 總是對我視而不見?

你有過這種經驗嗎?盯著螢幕,看著下拉式選單裡明明有那筆資料,公式也寫得中規中矩,但 MATCH 函數卻無情地回傳 #N/A。更詭異的是,有時候明明該找第 3 筆資料,Excel 卻自作聰明地回傳了第 1 筆。

身為每天與數據奮戰的上班族,這種「明明就在眼前卻找不到」的鬼撞牆現象最讓人抓狂。別急著懷疑自己眼花,更別以為是 Excel 壞掉了。這並非靈異事件,而是因為你的資料裡藏著幾個會變魔術的「萬用字元」,它們在後台偷偷啟動了 Excel 的隱藏機制。今天,我們就來拆解這些讓搜尋功能瞬間失靈的幕後黑手。


2. 驚人發現一:你的資料符號,其實是 Excel 的「萬用密碼」

在 Excel 的世界裡,有三個符號擁有「特權身分」,它們被稱為「萬用字元(Wildcards)」。當這些符號出現在你的搜尋內容中時,Excel 會自動啟動「過度聯想」模式,這會導致「找出來的資料不正確」。

這三位「雙面間諜」各自代表不同的意義:

  • 星號 (*):代表「任意數量」的字元(包括零個)。
  • 問號 (?):代表「精確的一個」字元。
  • 波浪號 (~):代表「跳脫字元」,它是用來控制其他符號的指令。
當你的搜尋目標(如:1*10 公斤、問號?)包含這些符號時,Excel 就不再只是找尋文字本身,而是試圖進行模糊比對,這就是一切混亂的根源。


3. 驚人發現二:那條神祕的波浪線 ( ~ ) 是雙面刃

在三位麻煩製造者中,波浪號 (~) 最具欺騙性。它在 Excel 邏輯中擔任「跳脫字元(Escape Character)」的角色,任務是告訴 Excel:「嘿!我後面那個符號不是指令,請把它當成普通文字。」

但當你的資料本身就包含波浪號(例如表示範圍的「1~10 公斤」)時,問題就大了。如果你直接搜尋 1~10,Excel 會把 ~ 當成指令,認為它是要「跳脫」後面的字元。結果,那個波浪號在 Excel 的搜尋邏輯中會「隱形」,導致 Excel 實際上是在找「1」接著「10」(即 110),當然會找不到資料並回傳 #N/A

正如來源中所提到的:

「這個波浪符號造成的問題...它可能把它當成特殊字元而不是一般文字。」


4. 驚人發現三:不只是 MATCH,這些明星函數全都中招!

萬用字元的干擾範圍極廣,並不侷限於 MATCH。只要是支援「模糊搜尋」的函數,都有可能讓你掉進這個坑裡。以下是受災函數清單,請務必留意:

  • 搜尋類MATCHXMATCHVLOOKUPXLOOKUP
  • 統計類COUNTIFCOUNTIFS
  • 加總類SUMIFSUMIFS
只要你的搜尋條件中包含 ~*?,這些函數就可能因為「誤認符號」而回傳錯誤的筆數或位置。


5. 視覺化案例:正確的資料,錯誤的結果

讓我們用實際例子來看看 Excel 是如何「找錯對象」的。假設你的資料清單如下:

  • A1: 1234
  • A2: 1~10 公斤
  • A3: 1?10 公斤
  • A4: 1*10 公斤
  • 案例 A:使用 COUNTIF 找「1?10 公斤」 你預期結果是 1。但因為 ? 代表「任一字元」,Excel 認為 1~101?10 都符合條件。結果原本應該只有 1 筆的結果變成了 2 筆
  • 案例 B:使用 MATCH 找「1*10 公斤」 星號 * 非常「貪婪」,它代表任何長度的字串。當 Excel 掃描清單時,只要開頭是 1、結尾是 10 公斤 的資料,它都會覺得「中獎了!」。在掃描到 A2 (1~10 公斤) 時,Excel 就會自作聰明地回傳位置 2,而忽略了真正位於 A4 的目標。
這不只是「找不到」的問題,更有「找錯對象」的風險,這在處理財務或薪資報表時是非常危險的。


6. 終極解方:如何讓 Excel 「乖乖聽話」?

要解決這個問題,核心思路就是:讓萬用字元「繳械」,變回純文字。

方法一:手動修正(適用於少量搜尋)

在搜尋條件的特殊符號前,手動加上一個波浪號 ~ 作為護盾。

  • 想找 *,搜尋條件寫成 ~*
  • 想找 ?,搜尋條件寫成 ~?
  • 想找 ~,搜尋條件寫成 ~~
方法二:自動修正(大推!最強「黃金公式」)

如果你是利用儲存格引用來搜尋,最專業的方法是使用 SUBSTITUTE 函數進行巢狀取代。請注意:必須最先處理 ~ 符號,否則後續幫星號或問號加上的波浪號會被重複處理,導致公式出錯。

假設你的搜尋關鍵字在 A1 儲存格,請將公式改寫為: =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, "~", "~~"), "*", "~*"), "?", "~?")

這串公式會自動幫你的關鍵字穿上「防護衣」,讓 Excel 乖乖地把所有符號都當成純文字處理,搜尋結果自然百分之百準確。

額外小撇步:改用全形符號

如果你的環境允許,將資料中的半形 ~*? 改用「全形符號」(如:~、*、?),也能直接避開陷阱,因為全形符號在 Excel 中不被視為指令。不過要注意,這可能會影響到與其他系統的對接,使用前請評估。


7. 結語:掌握規則,不再被工具玩弄

Excel 的萬用字元功能本意是為了提供強大的搜尋靈活性,但在處理精確資料時,它反而成了絆腳石。當你發現公式寫對卻回傳 #N/A 時,問題通常不在你的邏輯,而在於對「符號機制」的理解。

下次當你的 Excel 公式失效時,除了檢查空格與格式,你是否也會開始檢查那些看似平凡的符號了呢?掌握了這個「跳脫」的小技巧,你就能在 Excel 的資料叢林中橫著走,再也不怕被特殊符號搞得鬼撞牆了!


2026年7月12日 星期日

AppSheet 自動化黑科技:掃描 ISBN 瞬間抓取圖書資料的 5 個核心秘訣

 想像你是一名圖書管理員,或是擁有一座私人圖書館的熱血收藏家。面對桌上成堆待編目的新進書籍,如果得逐一用鍵盤輸入書名、作者、出版社,還要手動上傳封面圖片,這不僅是一場考驗耐心的體力活,更極容易出錯。這時你心中一定會浮現一個渴望:「如果只要用手機掃描一下書本背後的條碼,所有資料就能瞬間自動填好,該有多好?」這並非遙不可及的夢想。透過 AppSheet 結合 Google Apps Script (GAS) 呼叫圖書 API,你可以讓行動裝置化身為強大的自動化採編工具。本文將分享實現此功能的 5 個核心秘訣,帶你掌握雲端整合的關鍵技術。

秘訣一:隱藏的掃描開關 (The Scan Toggle)

在 AppSheet 中建立書籍資料表時,並非所有欄位預設都能進行條碼掃描。要讓 App 介面上出現掃描按鈕,關鍵在於欄位的屬性設定。

身為專家,我建議你直接進入資料表的 Data > Columns 設定,找到存放條碼的 ISBN 欄位。在該欄位的細節設定中,你必須明確勾選 「Scan?」(或顯示為 Scan問號) 選項。這個小動作是所有自動化的起點;只有開啟此開關,AppSheet 才會在輸入框旁顯示掃描圖示,允許使用者調用手機鏡頭讀取 ISBN 條碼。重視這個 UI 優化細節,能讓資料輸入的效率從第一步就獲得解放。

秘訣二:腳本橋樑:GAS 才是真正的幕後推手

單靠 AppSheet 的原生功能無法直接與外部書籍 API(如 Google Books API)進行複雜的資料交換,因此我們需要透過 Google Apps Script (GAS) 作為中繼站。在開始設定自動化流程前,請務必先在 GAS 腳本中填入你申請的 API Key,這是呼叫服務的憑證。

一個完整的自動化邏輯包含以下三個關鍵階段:

Add Row (新增資料):設定 Automation 觸發條件為「僅在新增資料(Adds only)」時執行,避免後續修改資料時重複觸發。

Call Script (呼叫腳本):執行名為 GetbookDetailISBN 的副程式。請注意,這個步驟的「Step Name」非常重要,因為它將成為後續引用資料的變數名稱。

Set Row Values (寫回數值):這是最容易卡關的地方。你必須使用 [步驟名稱].[欄位名稱] 的語法來提取腳本回傳的資料。例如,若上一步驟名為 Call Script,則書名欄位的公式應設為 [Call Script].[Title]。依此類推,將作者與圖片網址準確寫回資料庫。

秘訣三:最關鍵的「TW」區域代碼 (The Regional Fix)

在整合 API 時,開發者常遇到一個詭異現象:明明在電腦網頁瀏覽器上測試 API 網址能看到資料,但 AppSheet 執行自動化後回傳卻是一片空白。

這是因為當你在瀏覽器測試時,使用的是在地化網路環境;而 AppSheet 則是透過位於美國或其他地區的雲端伺服器(Cloud Server)去呼叫 API。若未指定區域,API 可能因地理限制而查無台灣當地的書籍資料。解決方案是在 API 呼叫網址中強制加入區域代碼參數(例如:Country.tw)。

「最後是加上區域代碼才解決這個問題...如果你不加就會有問題。」

這種「在地化」設定在 API 整合中經常被忽略,卻是決定自動化工具能否在本地環境順利運作的成敗關鍵。

秘訣四:權限大坑:別忘了開啟 API 存取權

許多初學者寫好了完美的 GAS 腳本,AppSheet 卻始終報錯無法執行,這通常是因為卡在「系統權限」。

請注意,這不是在腳本內的權限,而是 Google Apps Script 儀表板的專案設定。你必須進入 GAS 的「Settings (專案設定)」,在最下方的 Google Apps Script API 選項中,將開關從預設的關閉狀態手動切換為 「開啟」。若此開關未打開,AppSheet 的自動化引擎將被阻擋在門外,無法成功呼叫並執行你的腳本。

秘訣五:善用 Monitor 工具進行雲端偵錯

當資料沒有如預期出現時,不要盲目猜測問題出在哪。AppSheet 內建的 Automation > Monitor 是你的救星。

進入 Monitor 後,點擊 「Read Records (閱讀記錄)」,並尋找代表腳本執行的 「箭頭圖示」。這裡會詳細記錄 API 回傳的原始內容。此外,我也建議在 GAS 腳本中加入一個 Test 函數,配合 Logger.log() 指令。在串接到 AppSheet 前,先在 GAS 編輯器中執行 Test 函數,確認腳本回傳的 Title、Author 與 Image 是否正確。只要腳本端確認能抓到資料,接下來只需檢查 AppSheet 的欄位對應(Step Name)是否正確即可。

結語與反思

實現「掃描 ISBN 自動抓取資料」的過程,充分展現了 AppSheet 與 GAS 結合的強大威力。自動化開發的難點往往不在於程式碼的多寡,而是在於對細節的處理——從一個勾選框、一個區域參數到一個 API 開關,這些都是專家眼中的成功關鍵。

當你掌握了將外部 API 數據無縫串接到行動 App 的能力後,你的想像力將不再受限。下一個你想自動化的繁瑣流程會是什麼?是自動化的庫存追蹤,還是即時的匯率轉換系統?只要掌握了這套整合邏輯,無限的自動化可能就在你手中。

相關文章: 【No-Code 實戰】AppSheet 掃描 ISBN 自動帶入書名:避開 Google Books API 的三大深坑 https://skill-bestdaylong.blogspot.com/2026/07/no-code-appsheet-isbn-google-books-api.html 告別舊時代爬蟲:擁抱 Google Books API 的 4 個開發關鍵與數位轉型啟示 https://skill-bestdaylong.blogspot.com/2026/07/google-books-api-4.html




2026年7月10日 星期五

【No-Code 實戰】AppSheet 掃描 ISBN 自動帶入書名:避開 Google Books API 的三大深坑

 







前言

介紹為何選擇 AppSheet(開發快、行動端支援強)以及為何需要搭配 Google Apps Script (GAS) 呼叫 Google Books API。


技術架構

  1. AppSheet: 負責掃描條碼(ISBN)並觸發自動化。

  2. Google Apps Script (GAS): 作為中繼站,接收 ISBN、向 Google API 請求資料,並處理回傳格式。

  3. Google Books API: 資料來源。


重難點解析(這部分是 Blog 的精華)

坑一:地理位置限制造成的 403 錯誤

  • 問題現象:同一串 URL 在瀏覽器直接打開看得到資料,但在 GAS 執行時卻噴出 403 Forbidden,錯誤訊息為 "Cannot determine user location for geographically restricted operation"

  • 原因:Google 伺服器發出請求時沒有固定地理位置,而部分書籍(尤其是繁中書)有區域版權限制。

  • 解決方法:在 API 請求網址後方加上 &country=TW(或所在地代碼),強制指定查詢區域。

坑二:AppSheet 類型轉換失敗 (Schema Translation Error)

  • 問題現象Failed App Script type translation: Schema has more than one column but no object was returned

  • 原因:你在 AppSheet 設定了要接收一個「物件 (Object)」,但你的 GAS 卻回傳了單純的「字串」或格式不符。

  • 解決方法:確保 GAS 最後的 return 是一個用大括號 {} 包起來的 JSON 物件,且名稱(Key)必須與 AppSheet 的 Specific type 設定完全一致。

坑三:找不到腳本專案 (Invalid Argument)

  • 問題現象:在 AppSheet 選取 GAS 檔案時出現 INVALID_ARGUMENT 或找不到函數。

  • 原因:Google 帳號預設關閉了外部 API 存取腳本的權限。

  • 解決方法:前往 Google Apps Script Settings「Google Apps Script API」 設定為 ON

坑四:ISBN 格式不統一

  • 問題現象:掃描出來的 ISBN 有時帶橫線(978-626...),導致 API 搜尋失敗。

  • 解決方法:在 GAS 中使用正規表示式 replace(/\D/g, "") 先將輸入內容純化為數字。


最終完美版程式碼

你可以把這段程式碼貼在 Blog 供人複製:

JavaScript
/**
 * 由 AppSheet 觸發,根據 ISBN 取得書籍資訊
 * 解決了地理位置限制 (403) 與 格式轉換問題
 */
function getBookDetails(isbn) {
  // 初始化回傳物件,確保格式永遠一致
  var result = {
    "title": "查無資料",
    "authors": "",
    "image": ""
  };

  if (!isbn) return result;

  // 1. 清除非數字字元(去掉橫線與空白)
  var cleanIsbn = isbn.toString().replace(/\D/g, "").trim();

  // 2. 設定 API Key 與網址,關鍵在於加上 &country=TW
  const apiKey = "你的_API_KEY"; 
  const url = "https://www.googleapis.com/books/v1/volumes?q=isbn:" + cleanIsbn + "&key=" + apiKey + "&country=TW";
  
  try {
    const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
    const data = JSON.parse(response.getContentText());

    if (data.totalItems > 0) {
      const book = data.items[0].volumeInfo;
      result.title = book.title || "未知書名";
      result.authors = book.authors ? book.authors.join(", ") : "未知作者";
      result.image = book.imageLinks ? book.imageLinks.thumbnail : "";
    } else {
      result.title = "Google 資料庫查無此書 (" + cleanIsbn + ")";
    }
  } catch (e) {
    result.title = "系統執行出錯: " + e.message;
  }

  return result;
}

結語

寫 Blog 時可以提到:這不只是一個書庫 App,同樣的邏輯可以應用在「掃描藥品外盒」、「掃描零件序號」等各種自動化場景。只要解決了 API 限制與資料格式對接,AppSheet 的潛力非常巨大。

如果要寫在 Blog 裡,關於「開啟 API」與「建立腳本」的正確引導應該如下:


如何正確建立與授權腳本?(Blog 更新建議)

1. 使用 script.new 建立獨立腳本 (Standalone Script)

不要從 Google 試算表的「擴充功能」進入,因為那樣建立的是「容器綁定腳本 (Bound Script)」,有時 AppSheet 搜尋起來較困難。

  • 正確做法:在瀏覽器輸入 script.new。這會直接幫你建立一個獨立的 Apps Script 專案。這對 AppSheet 來說最容易找到,且管理最方便。

2. 開啟 Google Apps Script API 權限

這是 AppSheet 能否「看見」你腳本的關鍵開關。如果上面的連結失效,請帶領讀者這樣操作:

  1. 進入 Google Apps Script 首頁

  2. 點擊左側選單最下方的 「設定」(Settings)(圖示是一個齒輪 ⚙️)。

  3. 找到 「Google Apps Script API」 區塊。

  4. 將開關切換為 「開啟」(ON)

    • 註:如果這裡沒開啟,AppSheet 在選取檔案時會出現 


為什麼推薦使用 script.new

在 Blog 中可以補充這個技術細節:

  • 搜尋效率:AppSheet 的檔案選擇器對於「獨立腳本」的搜尋支援度更高。

  • 權限獨立:獨立腳本不依賴特定試算表,如果你以後想把這個書庫功能移到別的 App 或別的表格,腳本不需要重新搬家。

整理後的 Blog 偵錯章節:

「明明寫了腳本,AppSheet 卻找不到?」

  1. 請確保你是透過 script.new 建立的「獨立專案」。

  2. 檢查 Google Apps Script 設定頁面,確認 API 開關已開啟。

  3. 務必點擊腳本編輯器上方的「儲存」磁碟圖示。

Excel 鬼撞牆?明明資料就在那卻找不到?揭開 MATCH 函數失效的「特殊符號」真相

1. 為何 Excel 總是對我視而不見? 你有過這種經驗嗎?盯著螢幕,看著下拉式選單裡明明有那筆資料,公式也寫得中規中矩,但 MATCH 函數卻無情地回傳 #N/A 。更詭異的是,有時候明明該找第 3 筆資料,Excel 卻自作聰明地回傳了第 1 筆。 身為每天與數據奮戰的上...