Google apps script 在google应用程序脚本中的特定行之间添加行

Google apps script 在google应用程序脚本中的特定行之间添加行,google-apps-script,google-sheets,google-sheets-api,spreadsheet,Google Apps Script,Google Sheets,Google Sheets Api,Spreadsheet,我将数据从一个数据表复制到另一个数据表。目前,我正在将目标工作表中的每一新行插入到最后一个插入行的上方 datasheet.insertRowAfter(1); 每行都有以下格式的时间戳: 2021年5月25日23:30:00 时间戳在数据被复制时自动设置,并四舍五入到最后的0.30时间。 如果我有时忘记复制数据,就会产生间隙。因此,我想手动复制丢失的数据。 我在源代码表中创建了一个布尔值和一个时间 现在,我想在现有时间戳之间将数据复制到targetsheet。例如,必须在此行中设置上面屏幕

我将数据从一个数据表复制到另一个数据表。目前,我正在将目标工作表中的每一新行插入到最后一个插入行的上方

datasheet.insertRowAfter(1);
每行都有以下格式的时间戳:

2021年5月25日23:30:00

时间戳在数据被复制时自动设置,并四舍五入到最后的0.30时间。 如果我有时忘记复制数据,就会产生间隙。因此,我想手动复制丢失的数据。 我在源代码表中创建了一个布尔值和一个时间

现在,我想在现有时间戳之间将数据复制到targetsheet。例如,必须在此行中设置上面屏幕截图中的我的8.30时间戳:

我想“循环”时间戳列,找到手动时间的正确行,在那里创建新行并复制数据。 创建行和复制数据不是我的问题,只是在两个日期之间找到正确的行。 把日期和时间都考虑进去对我来说很重要

我不知道如何解决这个问题,也没有在网上找到任何东西。有人能帮忙吗

编辑: 要从一张图纸复制到另一张图纸的当前代码

function Parsetracking() {
  var spa=SpreadsheetApp.getActiveSpreadsheet();
  var inputsheet = spa.getSheetByName("Parse Output");
  var datasheet= spa.getSheetByName("Tracker");
  var parsesheet = spa.getSheetByName("Parse Input");

  var nowdate = new Date();
  var nowdateeurope = convertTZ(nowdate, "Europe/Berlin");
  var lastdate = datasheet.getRange("L2").getDisplayValues();
  var lasttime = datasheet.getRange("N2").getDisplayValues();
  
  var checkdate = joinDateAndTime(lastdate,lasttime)
  var diff = nowdateeurope - checkdate;
  if (parsesheet.getRange("j2").isChecked() === true) {
    //SpreadsheetApp.getUi().alert('Under Construction.');

    if (parsesheet.getRange("i2").getValue() < datasheet.getRange("k2").getValue()) {
      Logger.log('smaller')
    }
    else {
      Logger.log('bigger');
    }
    return;
  } 
  else {
    if(diff >= 3600001){
      datasheet.insertRowAfter(1);
      datasheet.clear;
      var datecell = datasheet.getRange("L2");
      var timecell = datasheet.getRange("M2");
      var roundedtimecell = datasheet.getRange("n2");
      inputsheet.getRange("A2:J2").copyTo(datasheet.getRange("A2:J2"),{contentsOnly:true});
      inputsheet.getRange("A3:J3").copyTo(datasheet.getRange("o2:W2"),{contentsOnly:true});
      datecell.setValue(nowdate).setNumberFormat("dd:mm:yyyy");;
      timecell.setValue(nowdate).setNumberFormat("hh:mm:ss");

      var gmt = new Date();
      gmt.setHours(nowdate.getUTCHours()+2);
      var hours = gmt.getHours();
      var minutes = nowdate.getUTCMinutes();
      var newtime = hours + ':' + minutes;
      console.log(newtime);
      var roundedtime = RoundTimestamp(newtime);
      console.log(roundedtime);
      roundedtimecell.setValue(roundedtime);
      datasheet.getRange('K3').autoFill(datasheet.getRange('K2:K3'),SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES)

    }
  }
}
函数Parsetracking(){
var spa=SpreadsheetApp.getActiveSpreadsheet();
var inputsheet=spa.getSheetByName(“解析输出”);
var数据表=spa.getSheetByName(“跟踪器”);
var parsesheet=spa.getSheetByName(“解析输入”);
var nowdate=新日期();
var nowdateeurope=Convertz(nowdate,“欧洲/柏林”);
var lastdate=datasheet.getRange(“L2”).getDisplayValues();
var lasttime=datasheet.getRange(“N2”).getDisplayValues();
var checkdate=joinDateAndTime(lastdate,lasttime)
var diff=nowdateeurope-检查日期;
if(parsesheet.getRange(“j2”).isChecked()==true){
//SpreadsheetApp.getUi().alert('在建');
if(parsesheet.getRange(“i2”).getValue()=3600001){
数据表。插入行之后(1);
数据表.clear;
var datecell=datasheet.getRange(“L2”);
var timecell=datasheet.getRange(“M2”);
var roundedtimecell=datasheet.getRange(“n2”);
inputsheet.getRange(“A2:J2”).copyTo(datasheet.getRange(“A2:J2”),{contentsOnly:true});
inputsheet.getRange(“A3:J3”).copyTo(datasheet.getRange(“o2:W2”),{contentsOnly:true});
datecell.setValue(nowdate.setNumberFormat(“dd:mm:yyyy”);;
timecell.setValue(nowdate.setNumberFormat(“hh:mm:ss”);
var gmt=新日期();
gmt.setHours(nowdate.getUTCHours()+2);
var hours=gmt.getHours();
var minutes=nowdate.getUTCMinutes();
var newtime=hours+':'+分钟;
console.log(newtime);
var roundedtime=RoundTimestamp(newtime);
console.log(roundedtime);
设置值(roundedtime);
datasheet.getRange('K3').autoFill(datasheet.getRange('K2:K3')、SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES)
}
}
}

如果时间戳已排序且格式相同,则可以通过以下方式完成:

const时间戳=[
"25.05.2021 23:20:00",
"25.05.2021 23:30:00",
"25.05.2021 23:40:00",
"25.05.2021 23:50:00"
];
const missed_timestamp=“25.05.2021 23:35:00”;
函数DMY_至YMD(dd_mm_yyy){
返回dd_mm_yyyy。替换(/(\d+)(\d+)(\d+)/,“$3$2$1”);
}
常数missed_YMD=DMY_到_YMD(missed_时间戳);
var指数=0
for(时间戳的var时间){
如果(错过_YMD日志(时间戳)如果时间戳已排序且格式相同,则可以通过以下方式完成:

const时间戳=[
"25.05.2021 23:20:00",
"25.05.2021 23:30:00",
"25.05.2021 23:40:00",
"25.05.2021 23:50:00"
];
const missed_timestamp=“25.05.2021 23:35:00”;
函数DMY_至YMD(dd_mm_yyy){
返回dd_mm_yyyy。替换(/(\d+)(\d+)(\d+)/,“$3$2$1”);
}
常数missed_YMD=DMY_到_YMD(missed_时间戳);
var指数=0
for(时间戳的var时间){
如果(错过_YMD日志(时间戳)
你说
我想“循环”时间戳列,找到手动时间的正确行,在那里创建新行并复制我的数据。
如何确定正确的行?你有正在处理的代码吗?请考虑提供一份你正在处理的电子表格的复印件,这样你的问题可以更清楚地理解。如何在一个特定列中找到正确的行?忘记日期和时间,也许用数字更容易理解。如果我的列具有以下值5 4 2 1 0,并且我希望在2和4之间插入一个3。我怎样才能在列中找到正确的位置?@Iamblichus我提供了我当前的代码,但我怀疑它是否有助于理解我的问题:)感谢您的努力,因此您在列中有一个源时间戳和一系列时间戳,并且您希望找到源时间戳所属的行索引(日期比上一行晚,比下一行早)。是这样吗?我假设你已经知道如何比较这些时间戳,对吗?你说
我想“循环”通过时间戳列找到手动时间的正确行并在其中创建新行并复制数据。< /代码>如何确定正确的行?是否有正在处理的代码?请考虑提供您正在处理的电子表格的副本,以便您的问题可以更清楚地理解。这是我的问题。如何在一个特定列中找到正确的行?忘记日期和时间,也许用数字值更容易理解。如果我的列有以下值5 4 2 1 0,我想在2和4之间插入一个3。我如何找到正确的行