如何通过App Script将Google Analytics API batchGet返回数据写入Google表格?
解决GA API数据写入Google表格的问题
没问题,我帮你把这段脚本补全,让它能把获取到的GA数据顺利写入Sheet1里。你已经完成了最关键的API请求部分,接下来只需要解析返回的响应,把数据整理成表格需要的格式,再写入就行。
首先,我们得先解析response里的报表数据——GA的batchGet返回结构里,报表内容在response.reports[0].data下面。然后要把维度和指标对应起来,还要加上友好的表头,这样表格里的数据才清晰易读。
补全后的完整脚本如下:
function get_ga(){ var start_date='2019-04-01'; var end_date='2019-04-15'; var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Sheet1"); // 清空表格原有数据(可选,避免重复写入,不需要的话可以删掉这行) sheet.clearContents(); var request = { "reportRequests": [ { "viewId": '26676016', "dateRanges": [{"startDate": start_date, "endDate": end_date}], "metrics": [{"expression": "ga:transactionRevenue"}, {"expression":"ga:transactions"},{"expression":"ga:sessions"}], "dimensions" : [{"name": "ga:sourceMedium"},{"name":"ga:campaign"}] } ], "useResourceQuotas": true, }; var response = AnalyticsReporting.Reports.batchGet(request); // 注意:这里不需要用JSON.stringify转换请求体,batchGet方法直接接受JS对象参数,之前的写法会导致请求失败哦 // 解析报表核心数据 var report = response.reports[0]; var headerNames = []; // 提取维度表头,去掉ga:前缀让表头更友好 report.columnHeader.dimensions.forEach(function(dim) { headerNames.push(dim.replace('ga:', '')); }); // 提取指标表头,同样去掉ga:前缀 report.columnHeader.metricHeader.metricHeaderEntries.forEach(function(metric) { headerNames.push(metric.name.replace('ga:', '')); }); // 准备要写入表格的数据集,先把表头放进去 var rows = [headerNames]; var dataRows = report.data.rows; if (dataRows) { // 遍历每一行数据,把维度和指标合并成一行 dataRows.forEach(function(row) { var rowData = row.dimensions; // 先加维度数据 row.metrics.forEach(function(metric) { rowData = rowData.concat(metric.values); // 再追加指标数据 }); rows.push(rowData); }); } else { // 如果没有获取到数据,在表格里提示一下 rows.push(['未获取到符合条件的数据']); } // 把整理好的数据一次性写入表格,从A1单元格开始 sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows); SpreadsheetApp.getUi().alert('数据已成功写入表格!'); }
我给你划几个关键细节:
- 修正了
batchGet的调用:不需要把request转成JSON字符串,这个方法直接接受JavaScript对象作为参数,之前的写法会导致请求失败。 - 清空原有数据:加了
sheet.clearContents()避免重复写入,如果你需要追加数据可以删掉这行。 - 表头优化:把维度和指标名称里的
ga:前缀去掉,让表格表头更简洁易懂。 - 高效写入:用
setValues一次性写入整个二维数组,比逐行写入效率高很多,尤其数据量大的时候更明显。 - 异常提示:如果没有返回数据,会在表格里显示提示,避免脚本报错中断。
你把这段完整脚本替换原来的代码,第一次运行时完成GA和Google表格的授权,就能看到数据自动写入Sheet1啦。
内容的提问来源于stack exchange,提问作者Berkay Songur
相关产品推荐
相关产品推荐

