【问题标题】:How do I automatically archive a google sheet with a google script?如何使用谷歌脚本自动归档谷歌表格?
【发布时间】:2019-06-07 23:35:38
【问题描述】:

我有一个 google 表格,它正在从 html 主页的表格中抓取数据。

数据在一个简单的谷歌表格中,其中 A1:H1 包含标题/标签,A2:H2 包含值

每次数据更改时,每次我的谷歌工作表用新数据更新时,我都希望 A2:H2 中的新数据自动“存档”/复制到另一个谷歌(子)工作表。

显然,我可以使用 Google 脚本执行此操作(然后每天使用触发器自动运行) - 我尝试在此处使用本教程:https://www.computerworld.com/article/2469616/business-intelligence/business-intelligence-79661-how-to-create-an-automatically-updating-spreadsheet.html#slide7

他们拥有/提供的代码是:

function storeData(){
var datarange = sheet.getDataRange();
var numRows = datarange.getNumRows();
var numColumns = datarange.getNumColumns();
var nextColumn = numColumns + 1;
sheet.getRange(1,nextColumn).setValue(new Date());
  for (var i=2; i <= numRows; i++){
var numLikes = sheet.getRange(i, 3).getValue();
sheet.getRange(i, numColumns + 1).setValue(numLikes);
}
}

当我运行此程序时,我收到以下错误:“工作表”未定义

那么,我需要在()之间放入我想要复制的数据范围吗?像这样?

function storeData(){
var datarange = sheet.getDataRange(A2:H2);
var numRows = datarange.getNumRows();
var numColumns = datarange.getNumColumns();
var nextColumn = numColumns + 1;
sheet.getRange(1,nextColumn).setValue(new Date());
  for (var i=2; i <= numRows; i++){
var numLikes = sheet.getRange(i, 3).getValue();
sheet.getRange(i, numColumns + 1).setValue(numLikes);
}
}

当我运行此程序时,我收到以下错误:第 2 行缺少 ")" 符号

有人可以帮忙吗?

【问题讨论】:

  • 欢迎。通常有一些建立代码,例如var ss = SpreadsheetApp.getActiveSpreadsheet();var sheet = ss.getActivesheet;。无论如何,这是你的问题,“工作表”从未定义过。在“storeData”的开头添加这两行,然后重试。

标签: google-apps-script google-sheets


【解决方案1】:

您需要定义工作表。

function storeData(){

  var ss = SpreadsheetApp.openById('ID'); // Select Spreadsheet by ID
  var sheet = ss.getSheetByName('Name'); // Select your Sheet by its Name
  var datarange = sheet.getDataRange();
  var numRows = datarange.getNumRows();
  var numColumns = datarange.getNumColumns();
  var nextColumn = numColumns + 1;

  sheet.getRange(1,nextColumn).setValue(new Date());
  for (var i=2; i <= numRows; i++){
var numLikes = sheet.getRange(i, 3).getValue();
sheet.getRange(i, numColumns + 1).setValue(numLikes);
}
}

【讨论】:

  • 感谢您的帮助。这行得通,但由于它来自此 Computerworld Tutorial 从 Twitter Accounts 收集喜欢它只收集一个示例帐户的喜欢以跟踪(教程:computerworld.com/article/2469616/business-intelligence/…我将 'numLikes' 重命名为 'numPoll' 但我不仅想复制来自 A2 的值,但也 A)从范围 A2:H2 复制单元格中的值和文本 B)不将它们复制到新列中,而是在新行中 C)将它们复制到另一张表
  • 这是一个样本表:docs.google.com/spreadsheets/d/…
  • 也许我们也可以从本教程中借用代码? ctrlq.org/code/20239-copy-google-spreadsheets 但是,当我尝试将黄色文本替换为源电子表格和目标电子表格时,代码不起作用/出现错误。
  • 我找到了解决问题的方法:stackoverflow.com/questions/12291549/…
  • 函数 CopyRange() { var sss = SpreadsheetApp.openById('spreadsheetid'); //替换为源 ID var ss = sss.getSheetByName('sheetname'); //替换为源工作表选项卡名称 var range = ss.getRange('A2:G50'); //分配要复制的范围 var data = range.getValues(); var tss = SpreadsheetApp.openById('SpreadsheetID'); //替换为目标 ID var ts = tss.getSheetByName('sheetname2'); //替换为目标工作表选项卡名称 ts.getRange(ts.getLastRow()+1, 1,49,7).setValues(data); //你需要定义复制数据的大小见 getRange() }
【解决方案2】:

出现第一个错误是因为未定义 sheet。有几种定义它的方法。如果要归档的工作表始终相同,请使用

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('Sheet1'); // Replace Sheet1 by the actual name of the sheet to be archived

出现第二个错误是因为getDataRange 不应包含任何参数。而不是

var datarange = sheet.getDataRange(A2:H2);

使用

var datarange = sheet.getRange('A2:H2');

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多