如何在Google Apps Script中实现变量除以1000000并解决报错
问题解决
错误原因很明确:spendvalues是二维数组(结构类似[[1000000], [2000000]]),你直接执行spendvalues/1000000会把数组转换成单个无效数值(实际是NaN),而setValues()方法要求必须传入二维数组,所以参数类型不匹配导致报错。
修正方案
你需要在数组的每个元素上执行除法操作,而非直接对整个数组做除法,同时还要修正原代码里的values.length(你未定义values变量,应该用spendvalues.length)。
方案1:生成spendvalues时直接处理除法
在map遍历阶段就把stats.spend除以1000000:
var spendvalues = campaignstatsdata.total_stats.map(({ total_stat: { stats } }) => [stats.spend / 1000000]) sheet.getRange(3, 6, spendvalues.length).setValues(spendvalues);
方案2:单独处理已生成的spendvalues
如果需要保留原始的spendvalues,可以单独创建新数组处理:
var spendvalues = campaignstatsdata.total_stats.map(({ total_stat: { stats } }) => [stats.spend]) // 处理除法 var processedSpendValues = spendvalues.map(row => [row[0] / 1000000]) sheet.getRange(3, 6, processedSpendValues.length).setValues(processedSpendValues);
完整修正后的代码
function readData() { var accesstoken = "TOKEN" var sheet = SpreadsheetApp.getActiveSheet() var campaignstatsurl = "https://adsapi.snapchat.com/v1/campaigns/e431cbcd-2281-49fe-8d05-b26c87660eb5/stats?&granularity=TOTAL&fields=impressions,swipes,video_views,view_completion,spend,video_views_time_based" var campaignstatsurlresponse = UrlFetchApp.fetch(campaignstatsurl, { headers: { "Authorization": "Bearer " + accesstoken } }); var campaignstatsdata = JSON.parse(campaignstatsurlresponse.getContentText()); // 直接在map中处理除法 var spendvalues = campaignstatsdata.total_stats.map(({ total_stat: { stats } }) => [stats.spend / 1000000]) // 修正length变量为spendvalues.length sheet.getRange(3, 6, spendvalues.length).setValues(spendvalues); }
内容的提问来源于stack exchange,提问作者Karim
相关产品推荐
相关产品推荐

