【问题标题】:How to write json data to a google sheet using javascript如何使用 javascript 将 json 数据写入谷歌表格
【发布时间】:2019-09-27 22:26:44
【问题描述】:

我正在尝试使用 javascript 将 json 数据呈现到谷歌表格。

我已经尝试搜索大量文档,并且已经尝试了几个小时。我的工作表中确实有一行数据,但我需要将整个 json 数据集呈现在正确的行和列中

function renderJSON() {
  /* This function collects JSON data from a specified endpoint
  and renders the data to a spreadsheet */

  // Fetch JSON data from the endpoint
  var url = 'http://dummy.restapiexample.com/api/v1/employees';
  var response = UrlFetchApp.fetch(url);     // Get the JSON data
  var object = JSON.parse(response.getContentText());
  //Logger.log(response);

  // Define an array of all object keys
  var rows = []; // Declare an empty array
  rows.push(object);
  var headerRow = Object.keys(rows);

  // Define an array of all object values
  var rows = headerRow.map(function(key){return rows [key]});

  // Define the contents of the range
  var contents = [
    headerRow,
    rows
    ];

  // Select the range and set its values
  var ss = SpreadsheetApp.getActive();
  var rng = ss.getActiveSheet().getRange(1, 1, contents.length, 
  headerRow.length)
  var i;
  for (i = contents[0]; i < contents.length; i++) {
    rng.setValues([i]);
  }
}

我希望整个 json 数据的格式对于具有正确标题且所有内容都在正确列中对齐的 google 工作表具有完美的格式。目前没有输出到工作表。

【问题讨论】:

  • 您确认contents 包含您期望的内容了吗?
  • 您是否收到错误消息?还是它没有错误地完成,但看起来不像您预期​​的那样?
  • 数据中的行数与范围内的行数不匹配。数据有 1 但范围有 2。
  • contents 包含使用 Logging.log(contents) 的 json 数据
  • 我想我可能会看到问题所在。 contents 中只有 2 项:标题和行,行本身就是一个对象。因此,通过遍历 contents 的内容,您将放入标题行 - 然后是代表所有其他行的 JSON 数据块。

标签: json google-apps-script google-sheets


【解决方案1】:

这个修改怎么样?在这个修改中,首先,从第一个元素中检索标题值。并且从标头中检索值。然后,将添加标题的值放入活动工作表中。

修改脚本:

function renderJSON() {
  var url = 'http://dummy.restapiexample.com/api/v1/employees';
  var response = UrlFetchApp.fetch(url);
  var object = JSON.parse(response.getContentText());

  var headers = Object.keys(object[0]);
  var values = object.map(function(e) {return headers.map(function(f) {return e[f]})});
  values.unshift(headers);
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}

如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

【讨论】:

  • 谢谢,无需进一步修改即可使用 :)
  • @j86h 感谢您的回复。很高兴您的问题得到解决。
  • 伟大的代码块 - 像魅力一样工作
  • @Liquidice 感谢您的检查。我很高兴。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多