隐藏最后一行不会隐藏表单提交

时间:2015-09-27 23:50:07

标签: google-apps-script google-sheets google-form

我正在尝试编写一个脚本,在表单提交时会将两组数据发送到两个不同的电子表格。数据来自一种形式。它应该复制最新的条目,然后隐藏该行以防止重复。我发现在某些情况下它没有隐藏最后一行并且正在复制多个副本。我意识到我的脚本可能不是最有效的,例如,我无法让范围工作!

插入了睡眠工具,因为我认为表单输入到电子表格时可能会有延迟,并且脚本在完成之前就已经运行了。

脚本附加到写入“表单响应”表单的表单,然后将其拆分为公司电子表格和客户电子表格。好吧,无论如何这是意图!

function copyRow(){

    Utilities.sleep(2000)

    var ss = SpreadsheetApp.openById('1_pnsvWtqB4CUivQZE65nFR0AG9zTOgqBVSlPZW4YCUQ'); //Source Form Input
    var sheet = ss.getSheetByName('Responses');
    var lastrow = ss.getLastRow();
    var rowIdx = sheet.getLastRow();
    var rowValues = sheet.getRange(lastrow,1,1,74).getValues();
    Logger.log(rowValues);

    Utilities.sleep(5000)

    var destValues = []; //Data to AUSJET
    destValues.push(rowValues[0][0],rowValues[0][1],rowValues[0][2],rowValues[0][3],rowValues[0][4],rowValues[0][5],rowValues[0][6],rowValues[0][7]
                     ,rowValues[0][8],rowValues[0][9],rowValues[0][10],rowValues[0][11],rowValues[0][12],rowValues[0][13],rowValues[0][14],rowValues[0][15]
                     ,rowValues[0][16],rowValues[0][17],rowValues[0][18],rowValues[0][19],rowValues[0][20],rowValues[0][21],rowValues[0][22],rowValues[0][23]
                     ,rowValues[0][24],rowValues[0][25],rowValues[0][26],rowValues[0][27],rowValues[0][28],rowValues[0][29],rowValues[0][30],rowValues[0][31]
                     ,rowValues[0][32],rowValues[0][33],rowValues[0][34],rowValues[0][35],rowValues[0][36],rowValues[0][37],rowValues[0][38],rowValues[0][39]
                     ,rowValues[0][40],rowValues[0][41],rowValues[0][42],rowValues[0][43],rowValues[0][44],rowValues[0][45],rowValues[0][46],rowValues[0][47]
                     ,rowValues[0][48],rowValues[0][49],rowValues[0][50],rowValues[0][51],rowValues[0][52],rowValues[0][53],rowValues[0][54],rowValues[0][55]
                     ,rowValues[0][56],rowValues[0][57],rowValues[0][58],rowValues[0][59],rowValues[0][60],rowValues[0][61],rowValues[0][62],rowValues[0][63]
                     ,rowValues[0][64],rowValues[0][65],rowValues[0][66],rowValues[0][67],rowValues[0][68],rowValues[0][69],rowValues[0][70],rowValues[0][71]
                     ,rowValues[0][73],rowValues[0][74]);
    // copy data from col A to col BU


    var dest = SpreadsheetApp.openById('1KQ43DJsJY0RpSnFHDcVfgAWLRfLKE6OD28CFkbjpJoU').getSheetByName('Form Responses');[1];
    dest.getRange(dest.getLastRow()+1,1,1,destValues.length).setValues([destValues]);

    var destValues = []; //DATA to CONCATENATOR
    destValues.push(rowValues[0][0],rowValues[0][1],rowValues[0][2],rowValues[0][3],rowValues[0][4],rowValues[0][5],rowValues[0][6],rowValues[0][7]
                     ,rowValues[0][8],rowValues[0][9],rowValues[0][10],rowValues[0][11],rowValues[0][12],rowValues[0][13],rowValues[0][14],rowValues[0][15]
                     ,rowValues[0][16],rowValues[0][17],rowValues[0][18],rowValues[0][19],rowValues[0][20],rowValues[0][21],rowValues[0][22],rowValues[0][23]
                     ,rowValues[0][24],rowValues[0][25],rowValues[0][26],rowValues[0][27],rowValues[0][28],rowValues[0][29],rowValues[0][30],rowValues[0][31]
                     ,rowValues[0][32],rowValues[0][33],rowValues[0][34],rowValues[0][35],rowValues[0][36],rowValues[0][37],rowValues[0][38],rowValues[0][39]
                     ,rowValues[0][40],rowValues[0][41],rowValues[0][42],rowValues[0][43],rowValues[0][44],rowValues[0][45],rowValues[0][46],rowValues[0][47]
                     ,rowValues[0][48],rowValues[0][49],rowValues[0][50],rowValues[0][51],rowValues[0][52],rowValues[0][53],rowValues[0][54],rowValues[0][55]
                     ,rowValues[0][56],rowValues[0][57],rowValues[0][58],rowValues[0][59]);
    // copy data from col A to col BH

    var dest = SpreadsheetApp.openById('1qB4OnKF3-OXFR1kR3jewHgYeslLdmIiE3maQNx0MPbk').getSheetByName('ROAMES');[1];//
    dest.getRange(dest.getLastRow()+1,1,1,destValues.length).setValues([destValues]);

    Utilities.sleep(2000)

    sheet.hideRows(lastrow)

1 个答案:

答案 0 :(得分:0)

我假设,由于数据来自表单,因此第一列将是'时间戳'。
所以,我已经复制了源电子表格中的最后一行,然后将最后一行A列的值与目标表的最后一行的A列值进行了比较,如果两者匹配,那么我还没有复制数据...

只有在这里可能引起问题的事情是,如果两个或更多的答复完全同时提交了

请尝试以下代码:

function copyRow(){
  Utilities.sleep(2000);
  var ss = SpreadsheetApp.openById('1_pnsvWtqB4CUivQZE65nFR0AG9zTOgqBVSlPZW4YCUQ');
  var sheet = ss.getSheetByName('Responses');
  var lastrow = sheet.getLastRow();

  var destValues = sheet.getRange('A'+lastrow+':BU'+lastrow).getValues();
  var dest = SpreadsheetApp.openById('1KQ43DJsJY0RpSnFHDcVfgAWLRfLKE6OD28CFkbjpJoU').getSheetByName('Form Responses')
  if( dest.getRange(dest.getLastRow(), 1,1,1).getValue().toString() != destValues[0][0].toString() )
    dest.getRange(dest.getLastRow()+1,1,1,destValues[0].length).setValues(destValues);

  var destValues = sheet.getRange('A'+lastrow+':BH'+lastrow).getValues();
  var dest = SpreadsheetApp.openById('1qB4OnKF3-OXFR1kR3jewHgYeslLdmIiE3maQNx0MPbk').getSheetByName('ROAMES')
  if( dest.getRange(dest.getLastRow(), 1,1,1).getValue().toString() != destValues[0][0].toString() )
    dest.getRange(dest.getLastRow()+1,1,1,destValues[0].length).setValues(destValues);
};