javascript - 使用脚本从一个 Google 工作表剪切并粘贴到另一个 Google 工作表

标签 javascript google-apps-script google-sheets

我有一个电子表格,其中一个工作表中包含大量数据。为了减少困惑,我编写了一个函数,该函数将查找日期早于当前日期的行,将它们复制到名为“备份”的工作表中,并从当前工作表中删除该条目。

我的 fxn 如下所示。当我调用它时,它会复制大约一半的数据。在它清空我的工作表之前,我必须运行它几次。当它这样做时,它不会将最后一个值写入目标工作表。

如果有任何改进我的功能的建议,我将不胜感激。

function movePros() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var TZ = CalendarApp.openByName(ss.getSheetByName("Templates").getRange("E1").getValue()).getTimeZone();
var date = Utilities.formatDate(new Date(), TZ, "MM/dd/yyyy HH:mm:ss");
var dataSheet = ss.getSheetByName("Put your events here");
var targetSheet = ss.getSheetByName("Archive");
var dataRange = dataSheet.getRange(2, 1, dataSheet.getMaxRows(), dataSheet.getMaxColumns());
var count = 0;

// Create one JavaScript object per row of data.
objects = getRowsData(dataSheet, dataRange);
var res = objects.length;

for (var i = 0; i < objects.length; ++i) {
 var rowData = objects[i];
 var tmp = Utilities.formatDate(rowData.endDate, TZ, "MM/dd/yyyy HH:mm:ss");

 var last_row = targetSheet.getLastRow();
 targetSheet.insertRowAfter(last_row);
 var target_range = targetSheet.getRange("A"+(last_row+1)+":H"+(last_row+1));

 //Browser.msgBox("The length is " + rowData.eventId.length );

 if ((tmp.valueOf() < date.valueOf() ) && (tmp.valueOf().length > 3)){       
      //Browser.msgBox(rowData.eventId);
      var source_range = dataSheet.getRange("A"+(i+2)+":H"+(i+2));
      source_range.copyTo(target_range);
      count++;
      dataSheet.deleteRow(i+2);
      SpreadsheetApp.flush();
 }     
 }  
 ss.toast(count + " rows copied", "Feedback", 5);
 }

最佳答案

function movePros() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var TZ = CalendarApp.openByName(ss.getSheetByName("Templates").getRange("E1").getValue()).getTimeZone();
  var date = Utilities.formatDate(new Date(), TZ, "MM/dd/yyyy HH:mm:ss");
  var dataSheet = ss.getSheetByName("Put your events here");
  var targetSheet = ss.getSheetByName("Archive");
  var count = 0;
  var orig_last_row = targetSheet.getLastRow(); //we use this as our reference

  //dataSheet.getRange(row, column, numRows, numColumns)
  var header_data = dataSheet.getRange(1, 1, 1, dataSheet.getMaxColumns()).getValues();
  var data = dataSheet.getRange(2, 1, dataSheet.getMaxRows(), dataSheet.getMaxColumns()).getValues();
  var srcArray = new Array();
  var dstArray = new Array();
  var headerArray = new Array();

  //get the header into our array, this line contains our column headers
  var buff = header_data[0];
  headerArray.push(buff);

  for (i in data){
    var row = data[i];

    try {
      var tmp = Utilities.formatDate(row[5], TZ, "MM/dd/yyyy HH:mm:ss");

      if(tmp.valueOf() < date.valueOf()){
        srcArray.push(row);
        count++;
      }else{
        dstArray.push(row);
      }

    } 
    catch(err){
      //Logger.log("reached the end of the array");
    }

  }

  dataSheet.clearContents();

  if(srcArray.length > 0){
      targetSheet.getRange(orig_last_row+1, 1, srcArray.length, srcArray[0].length).setValues(srcArray);
  }  

  if(dstArray.length > 0){
    dataSheet.getRange(1, 1, headerArray.length, headerArray[0].length).setValues(headerArray);
    dataSheet.getRange(2, 1, dstArray.length, dstArray[0].length).setValues(dstArray);
  }


  ss.toast(count + " rows copied", "Feedback", 5);
}

关于javascript - 使用脚本从一个 Google 工作表剪切并粘贴到另一个 Google 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13238594/

相关文章:

google-apps-script - 如何使用谷歌应用脚​​本在谷歌表单中创建可分级的文本项?

google-apps-script - 谷歌应用脚​​本: does the 30 simultaneous executions limitation apply to the owner of the script or the user who executes it?

javascript - 如何从 Google 表单提交触发器函数访问电子表格

google-apps-script - 尝试使用应用程序脚本获取 Google Analytics 4 时出现身份验证错误

javascript - 我正在尝试使用 Google Apps 脚本为 Google Docs 制作实时自动更正的插件

xml - Googles IMPORTXML 返回 "Imported content is empty"错误

javascript - "Any"GraphQL 查询返回类型的数据类型

javascript - 拆分 emscripten 生成的文件

javascript - KineticJS层的Minimap如何实现?

javascript - promise 一次性解决