2015-09-27 96 views
0

我正在嘗試編寫一個表單提交的腳本將兩組數據發送到兩個不同的電子表格。數據來源於一種形式。它應該複製最近的條目,然後隱藏該行以防止重複。我發現在某些情況下,它並沒有隱藏最後一行,並且複製了多個副本。我意識到我的腳本可能不是最高效的,例如,我無法獲得工作範圍!隱藏最後一行不隱藏表單提交

睡眠實用程序被插入,因爲我認爲表單輸入寫入電子表格可能有延遲,腳本在完成之前運行。

該腳本附加到寫入表單響應表單的表單中,然後將其分割爲公司電子表格和客戶電子表格。那麼無論如何這就是意圖!

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) 
+0

您已設置LASTROW爲:「VAR lastrow = ss.getLastRow();「,取而代之的是:」var lastrow = sheet.getLastRow();「 ?? – Kishan

+0

即使您在複製值後在最後隱藏行,但在腳本開始時(即獲取值時),您並未檢查行是否已隱藏?爲了獲得該行的隱藏狀態仍不可行,請查看此[link](https://code.google.com/p/google-apps-script-issues/issues/detail?id=195 )。 – Kishan

回答

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); 
}; 
+0

這似乎是工作。我將在本週進行一些測試。因爲在任何時候只有三個人可能會提交表格,所以這不應該成爲多個回覆的問題。謝謝Kishan,Andrew。 –

+0

嗨Kishan,我仍然遇到這個問題。令人沮喪的是,我也無法制定出這種模式。有時它複製最後兩行,有時它只複製最後一行。我已經嘗試了表單提交(手機與PC)的設備混合。還有什麼想法?我也想了解你的IF語句。 –

+0

在此期間,我使用腳本教程腳本刪除重複。我已經設置了觸發器在formSubmit上關閉,但有一段時間延遲。簡而言之,這個工作已經奏效...... –