将新数据附加到工作表而不覆盖 GAS

本·特纳

我需要弄清楚要添加到脚本中的内容,以便在不覆盖现有数据的情况下将新数据添加到工作表的末尾。我是一个完全的初学者并且已经研究过这个,但似乎无法将代码放在一起。这是我的脚本:

   function myFunction() {
  var url = "xxxxxxxx"
  
  var response = UrlFetchApp.fetch(url)
  
  var data = response.getContentText()
  
  var result = JSON.parse(data)
  
  var sheet = SpreadsheetApp.getActiveSheet()
  
  sheet.clear()
  
  var headerRow = ['Title','Brand','UPC','In Stock','Stock Level','Price','Seller','Next Day','Ship to Home', 'Link']
  
  sheet.appendRow(headerRow)
  
  for(var i=0; i<result.category_results.length; i++){
    
    var row = [result.category_results[i].product.title, result.category_results[i].product.brand, result.category_results[i].product.upc,result.category_results[i].inventory.in_stock, 
               result.category_results[i].inventory.stock_level, result.category_results[i].offers.primary.price, result.category_results[i].offers.primary.seller_name, 
                 result.category_results[i].fulfillment.next_day_shipping_eligible, result.category_results[i].fulfillment.ship_to_home, result.category_results[i].product.link]
    
    sheet.appendRow(row)
  
  }

}
Tanaike

改装要点:

  • 在您的脚本中,每次运行时都会清除工作表sheet.clear()这样,现有值总是被删除,工作表被新值覆盖。我认为这就是你的问题的原因。
  • 在您的脚本中,appendRow在循环中使用。在这种情况下,工艺成本会很高。
  • 为了将新值附加到工作表中,我想提出以下流程。
    1. 检索值。(这是您的脚本。)
    2. 检查工作表中是否存在现有值。
    3. 创建一个用于将值放入工作表的数组。
    4. 使用数组放置值。
      • 在这种情况下,setValues使用 代替appendRow

当以上几点反映到你的脚本中时,它变成如下。

修改后的脚本:

function myFunction() {
  // 1. Retrieve values. (This is your script.)
  var url = "xxxxxxxx";
  var response = UrlFetchApp.fetch(url);
  var data = response.getContentText();
  var result = JSON.parse(data);
  
  // 2. Check whether there are the existing values in the sheet.
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  if (lastRow == 0) {
    var headerRow = ['Title','Brand','UPC','In Stock','Stock Level','Price','Seller','Next Day','Ship to Home', 'Link'];
    sheet.appendRow(headerRow);
  }
  
  // 3. Create an array for putting the values to the sheet.
  var values = []
  for(var i=0; i<result.category_results.length; i++){
    var row = [result.category_results[i].product.title, result.category_results[i].product.brand, result.category_results[i].product.upc,result.category_results[i].inventory.in_stock,
    result.category_results[i].inventory.stock_level, result.category_results[i].offers.primary.price, result.category_results[i].offers.primary.seller_name,
    result.category_results[i].fulfillment.next_day_shipping_eligible, result.category_results[i].fulfillment.ship_to_home, result.category_results[i].product.link];
    values.push(row);
  }
  
  // 4. Put the values using the array.
  sheet.getRange(lastRow + 1, 1, values.length, values[0].length).setValues(values);
}

笔记:

  • 在这个修改后的脚本中,它假设您的值可以使用row. 请注意这一点。

参考:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 GAS 将列添加到工作表

数据列表中的奇怪值输入 'Gas' 'gas'

根据GAS中的JSON数据创建数组

如何将范围与GAS垂直关联

使用 GAS 将数据导入另一个工作表时如何保留单元格背景颜色?

如何将表格数据传递到GAS

GAS/Javascript:如何将值设置为仅工作表底部的空行

将数组的元素返回到Google工作表(GAS / JS)的多列中

如何使用刷新将Excel Web Data添加到新列或工作表中而不覆盖旧数据

使用 GAS 将表单上传的图像嵌入到谷歌文档

将链接分配给 GAS 上的 HTML 按钮

在Google Spreadsheet中搜索相同的值,然后将其附加到GAS的下一列中

在 GAS 中,通过循环读取电子表格中多张工作表中的数据列

如何将字典附加到列表而不覆盖数据

GAS:getLastRow()仅对工作表有效,而不对数组有效吗?

GAS将非域成员添加到Google网上论坛不起作用

使用python pandas将现有的Excel工作表附加到新的数据框

x86汇编编程(GAS语法):'shl'的操作数类型不匹配

将新的 api 数据附加到谷歌表

当我将我的GAS项目作为附件测试时,触发器无法正常工作

当工作表包含动态电子表格中的完整列arrayformulas时,GAS如何使用getDataRange和getLastRow

GAS代码可将仅从Google表格生成的pdf限制为具有数据的行

如何循环JSON响应以获取Javascript或GAS中的特定数据

如何使用Javascript / GAS访问JSON响应中的子级数据

为什么此GAS脚本需要这么长时间才能加载数据验证选项?

电子表格数据中的GAS柱形图

需要从GAS网络应用的先前条目中检索特定数量的数据

GAS 与 cors 和从 html 获取数据到电子表格的问题

将Yasm代码(Intel样式)移植到gas(AT&T样式)