【问题标题】:Google Apps Script append data to new spreadsheetGoogle Apps 脚本将数据附加到新电子表格
【发布时间】:2015-03-26 22:33:35
【问题描述】:

我有一个电子表格“X”,它收集我想每天一次从第 2 行备份到工作表末尾的数据到另一个现有的电子表格“Y”中,并将其附加到其末尾。我也想从第 2 行开始删除电子表格“X”中的现有条目。本质上,电子表格“X”将是累积电子表格,并被视为我的备份。我的电子表格确实做得最多,除了它添加到电子表格“Y”的顶部,它不附加,它只是覆盖,所以我正在查看 CopyTo 或 AppendRow 函数,并希望有人建议如何更正。

function myFunction() {

  function getDate(){
  var d = new Date();
  var dateofDay = new Date(d.getTime());
  return Utilities.formatDate(dateofDay, "GMT+2", "MM-dd-yyyy hh:mmm:ss z");
  }

  //get the date from current Spreadsheet
  var ss = SpreadsheetApp.getActiveSheet();
  var dataRange = ss.getRange(1, 1, ss.getLastRow(), ss.getLastColumn());
  var myData = dataRange.getValues();
  //Open new Spreadsheet & paste the data
newSS = SpreadsheetApp.openById("abcdefg");
newSS.getActiveSheet().getRange(1, 1, ss.getLastRow(), ss.getLastColumn()).setValues(myData);
  //Clear the original sheet except header row
  ss.deleteRows(2, ss.getLastRow()-1);

}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    只需将源电子表格的范围更改为

    var dataRange = ss.getRange(2, 1, ss.getLastRow(), ss.getLastColumn());

    然后将目标电子表格的范围更改为

    newSS.getActiveSheet().getRange(newSS.getLastRow()+1, 1, ss.getLastRow(), ss.getLastColumn()).setValues(myData);
    

    这是工作代码

    function myFunction() {
    
     function getDate(){
     var d = new Date();
     var dateofDay = new Date(d.getTime());
     return Utilities.formatDate(dateofDay, "GMT+2", "MM-dd-yyyy hh:mmm:ss z");
     }
    
     //get the date from current Spreadsheet
     var ss = SpreadsheetApp.getActiveSheet();
     var dataRange = ss.getRange(2, 1, ss.getLastRow(), ss.getLastColumn());
     var myData = dataRange.getValues();
     //Open new Spreadsheet & paste the data
    newSS = SpreadsheetApp.openById("1Y2KsVsNaq_-3FvFhx1J8ac5uthl4Wk0kg9hKkVp-Q8Y");
    Logger.log(newSS.getLastRow());
    newSS.getActiveSheet().getRange(newSS.getLastRow()+1, 1, ss.getLastRow(), ss.getLastColumn()).setValues(myData);
    //Clear the original sheet except header row
    ss.deleteRows(2, ss.getLastRow()-1);
    }
    

    【讨论】:

    • 太棒了。非常感谢,我用 getLastRow 完成了 getRange。它完美地工作。谢谢!!!
    【解决方案2】:

    请输入以下代码

    newSS.getActiveSheet().insertRows(1, myData.length);
    

    在这一行之前:

    newSS.getActiveSheet().getRange(1, 1, ss.getLastRow(), ss.getLastColumn()).setValues(myData);
    

    希望能帮到你。

    【讨论】:

      【解决方案3】:

      这是因为在第二个电子表格中,您在这行代码中设置了范围 [1,1] 到 [lastrow,lastcolumn] 的值。

      newSS.getActiveSheet().getRange(1, 1, ss.getLastRow(), ss.getLastColumn()).setValues(myData);
      

      相反,您必须取该工作表的最后一行并从 lastrow+1 添加行。

      更多参考请查看here。希望对您有所帮助!

      【讨论】:

      • 感谢您的反馈,这很有意义。我对此很陌生,所以当我收到此错误“找不到方法 appendRow(number,number)。(第 16 行,文件“复制””newSS.getActiveSheet().appendRow(1, ss. getLastrow+1)。我想我已经很接近了,希望得到反馈。
      • appendRow() 方法将行内容作为参数而不是行列值。追加行(行内容)。
      猜你喜欢
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多