亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Google App 腳本 - 映射時出錯 - 類型錯誤:無法讀取未定義的屬性“地圖”

Google App 腳本 - 映射時出錯 - 類型錯誤:無法讀取未定義的屬性“地圖”

拉風的咖菲貓 2023-05-25 16:24:29
在社區的指導下,我最近在這里了解了給定谷歌表格的 BatchUpdating 背景顏色。我試圖將其應用于我的實際工作表,但遇到了錯誤代碼。TypeError: Cannot read property 'map' of undefined我的測試表中沒有問題的代碼在這里:var TestArray = Sheets.Spreadsheets.get("1eAq-RbtrCSMRPZ0p7XIpG3vd29yL-3SQ3D3JGyiUhKg", {   ranges:"TestBackgroundSheet!A1:AD39", fields:"sheets(data(rowData(values(effectiveFormat.backgroundColor))))" });  var backgroundColors = TestArray["sheets"][0]["data"][0]["rowData"]                      .map(row => row["values"]                      .map(value => value["effectiveFormat"]["backgroundColor"])); 然后我將這段代碼復制并粘貼到我的實際項目中。為了排除故障,我什至將我的測試項目中的確切工作表復制到實際項目中。代碼列在這里:var TestArray = Sheets.Spreadsheets.get("1pcIKNUFmkk0d-UGg1sXl5xbsJC2WhocIHpM3et-CMgo", {   ranges:"TestBackgroundSheet!A1:AD39", fields:"sheets(data(rowData(values(effectiveFormat.backgroundColor))))" });  var backgroundColors = TestArray["sheets"][0]["data"][0]["rowData"]                      .map(row => row["values"]                      .map(value => value["effectiveFormat"]["backgroundColor"]));如您所見,除了 SheetID 不同之外,代碼完全相同。盡管如此,我仍然收到TypeError: Cannot read property 'map' of undefined錯誤。錯誤代碼引用第 172 行,它是.map(value => value["effectiveFormat"]["backgroundColor"]));
查看完整描述

1 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

回答:

并非所有元素都有數據 - 因此當該行沒有數據時row["values"]您無法運行。.map(value => value["effectiveFormat"]["backgroundColor"])


更多信息:

您已使用 API 從 API 獲取數據


Sheets.Spreadsheets.get("1eAq-RbtrCSMRPZ0p7XIpG3vd29yL-3SQ3D3JGyiUhKg")

并使用您的字段掩碼對其進行相應過濾。您作為響應獲得的數據將是工作表中的所有內容- 即使是沒有背景顏色數據的單元格。因此,您不能像這樣映射每一行,因為您將嘗試引用effectiveFormat根本不存在的元素。


使固定:

您可以使用三元運算符來解決這個問題;如果該元素value["effectiveFormat"]不存在,您可以簡單地返回null:


var rowData = TestArray["sheets"][0]["data"][0]["rowData"]

    .map(row => row.getValues()).toString()


var backgroundColors = JSON.parse("[" + rowData + "]")

    .map(value => {

        let v = value["effectiveFormat"]

        return v ? v["backgroundColor"] : null

    })

注意: API 還會在響應中返回 JSON 對象中的函數,您可以在 Apps 腳本中使用這些函數。這會派上用場,因為row["values"]直接引用可以返回對象而不是數據:


console.log(TestArray["sheets"][0]["data"][0]["rowData"]

            .map(row => row["values"]))

產量:


  { 

    setPivotTable: [Function],

    getDataSourceTable: [Function],

    getDataValidation: [Function],

    getEffectiveValue: [Function],

    setNote: [Function],

    setFormattedValue: [Function],

    getTextFormatRuns: [Function],

    setUserEnteredFormat: [Function],

    toString: [Function],

    getFormattedValue: [Function],

    setEffectiveFormat: [Function],

    effectiveFormat: [Object],

    setDataSourceFormula: [Function],

    getPivotTable: [Function],

    setUserEnteredValue: [Function],

    setDataValidation: [Function],

    setDataSourceTable: [Function],

    getUserEnteredFormat: [Function],

    setEffectiveValue: [Function],

    getEffectiveFormat: [Function],

    getHyperlink: [Function],

    getNote: [Function],

    setHyperlink: [Function],

    getUserEnteredValue: [Function],

    setTextFormatRuns: [Function],

    getDataSourceFormula: [Function] 

  },

  ...

]

在將數據放回第二個映射函數之前,第一個調用通過此調用toString()。.map(row => row.getValues())


查看完整回答
反對 回復 2023-05-25
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號