標題: Google Sheets 節點(Auto-Map、typeVersion 3)在升級到 2.22.5 後寫入值時偏移一列
描述問題/錯誤/疑問
將 n8n 從舊版本(約 10 個版本前)升級到 2.22.5 後,使用 「Auto-Map 輸入資料到欄位」 的 Google Sheets 節點開始在 Append(附加)和 Update(更新)時將值寫入 錯誤的欄位 中。沒有任何節點被更改 — 它們仍然是 typeVersion 3(最新版本是 4.7)。唯一的變數是 n8n 版本。
此偏移是一個一致的 單列左移,從行中的特定欄位開始:
最小示意圖(傳入 JSON 金鑰 → 應該去的位置 vs. 實際落地的位置):
header: ... | colN | colN+1 | colN+2 | colN+3
should: | (empty)| fieldA | fieldB | fieldC
actual: | fieldA | fieldB | fieldC | (empty) ← 從 colN 開始全部左移 1 列
關鍵點:讀取端是正確的 — 只有寫入端放錯了資料。 Append 節點的輸出 JSON 顯示例如 fieldA: "X" 並報告成功,但按鍵讀回該行時卻返回 fieldA: "Y"(鄰近欄位的值)。該值被實際寫入到隔壁欄位去了。下游任何工作表內公式欄位和後續 Update 步驟隨後會對著錯誤的儲存格進行計算,並返回 #REF!。
所以 Auto-Map 的名稱 → 欄位匹配部分失敗了:早期的欄位匹配正確,隨後的連續區塊被移位了一列。
似乎會觸發此問題的工作表特性(簡單工作表無法重現):
-
寬工作表(約 150 列),其中工作流程僅提供約 30 列;其餘為空白或 工作表內公式欄位。
-
重複的標題名稱(相同的標題文字出現在兩個不同的欄位中)。
-
欄位值為 巢狀物件 / JSON 塊 而非純量值。
此模式(Append → 讀回 → Update with row/formula 上下文)在許多工作流程中使用,因此影響所有工作流程。
錯誤訊息是什麼(如果有的話)?
無節點錯誤 — Append/Update 報告 成功。唯一可見的失敗是相依工作表公式中的 #REF!,由上游欄位移位引起。
提給團隊的問題:
-
Google Sheets typeVersion 3 的 Auto-Map 欄位解析邏輯在最近版本和 2.22.5 之間是否有變更?(v3 現在是否經過不同的程式碼路由?)
-
重複標題 和/或 巢狀物件儲存格值 是否已知會在目前版本中破壞 Auto-Map 欄位對齊?
-
建議路徑 — 將這些節點改為顯式 「逐欄位對應」、升級到 node 4.x,或這是值得修補的 v3 回歸?
工作流程/輸出: 很樂意根據需要分享已淨化的最小重現工作流程和前後行資料。
n8n 設定
嗨 @Dwayne_Taylor
你的資料之所以移位,是因為 n8n 的「自動對應」功能對於哪項資訊應該放在哪一欄感到困惑。把它想象成一條傳送帶:一旦系統遇到「凸起」——例如出現兩次的欄名或複雜的資料——它就會失去位置。因為它不知道該如何放置那個特定項目,所以會不小心把後面的所有內容向左推一個位置,造成該列其餘資料錯位的連鎖反應。
這種情況現在很可能發生,是因為 n8n 的最近更新改變了軟體在後台計算這些位置的方式。雖然你沒有改變你的節點,但運行這些節點的「引擎」被更新了。在有重複標題的寬表單中,系統難以區分名稱相同的欄位,這會觸發錯位並導致你在試算表中看到的公式損毀。
要修正這個問題,最安全的方法是停止依賴「自動對應」,改為在你的重要工作流程中使用「逐欄對應」。通過手動告訴 n8n 每個欄位確切應該進入哪一欄,你可以消除猜測並防止系統移位你的資料。如果可以的話,將你的重複標題重新命名為唯一的名稱,也可以解決混淆的根本原因。
這有幫助嗎?
除了切換到「逐欄對應」之外,還有另一個選項值得嘗試:將 Google Sheets 節點升級到最新的 typeVersion (4.7)(編輯此節點的 JSON)。TypeVersion 4 重新編寫了欄位對應的內部運作方式,因此與較新 n8n 版本中 typeVersion 3 行為相關的自動對應偏移問題可能不會影響它。在手動重新對應所有 150 個欄位之前,值得嘗試一下。
嘿夥伴們 - 感謝你們的迅速跟進
這是否假設欄位名稱有重複?
考慮到我的一些工作表確實有重複項目,但有些沒有,卻仍然拋出錯誤
另外 @nguyenthieutoan 你有節點升級的文檔嗎 - 我看不到你提到的功能
Hi @Dwayne_Taylor
抱歉,您需要透過編輯此節點的 JSON 來手動編輯節點版本。
根據上面已分享的內容,有一些試算表模式似乎會在 n8n 升級後使 typeVersion 3 中的自動對應變得容易破損:
- 非常寬的試算表(~150 欄以上),其中工作流程只寫入少數欄位,其餘欄位為空或公式欄。
- 重複的標題名稱 – 自動對應依賴標題文字,所以相同名稱可能會混淆比對邏輯。
- 包含特殊字元的標題名稱(例如分行符),Google 試算表接受但 n8n 不一定能識別為相同名稱。
- 儲存巢狀物件 / JSON blob 而非簡單標量值的欄位。
當其中幾個因素結合時,即使節點本身未改變,這正是您描述的「向左移動一欄」的位置。在這些情況下,將關鍵流程移到較新試算表節點版本上明確的「逐欄對應」通常是最可靠的長期解決方案。
@Dwayne_Taylor 關於 typeVersion 更新——開啟受影響的工作流程,點擊 ... 菜單(畫布右上角)→ 下載。用文字編輯器開啟下載的 JSON 檔案,找到你的 Google Sheets 節點,然後將 typeVersion 從 3 改為 4.7 並新增匹配模式欄位。更新前後看起來如下:
{
"before": {
"parameters": {
"operation": "append",
"documentId": "...",
"sheetName": "...",
"dataMode": "autoMapInputData"
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 3
},
"after": {
"parameters": {
"operation": "append",
"documentId": "...",
"sheetName": "...",
"columns": {
"mappingMode": "defineBelow",
"matchingColumns": ["row_id"],
"value": {}
}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7
}
}
然後將編輯過的 JSON 匯入回去(右上角 ... → 匯入)。v4 節點使用 defineBelow 映射模式,讓你明確地將每個輸入欄位綁定到試算表欄位,這樣重複的標題和 150 列寬的試算表就不會再造成問題。
關於你的第一個問題(沒有重複資料時是否適用)——是的,@nguyenthieutoan 列出的所有 4 種模式都採用相同的匹配邏輯(寬型稀疏試算表、標題中的特殊字元、巢狀物件)。重複資料只是最明顯的情況。如果你受影響的某些試算表沒有重複資料,你可能遇到其他情況——最可能是巢狀物件的情況,因為你提到 v3 讀取正常但寫入出錯(v3 中的 JSON blob 序列化器在欄位稀疏時會洩漏到相鄰欄位)。