0

我有這個腳本,它將輸入到Google表單中的數據做了幾件事情,但我需要提出兩個進入者具有完全相同的名稱以完全刪除之前的條目。如何使用腳本從鏈接到表單的電子表格中刪除一行?

function formChanger() { 
    var doc = DocumentApp.openById('THIS WAS MY ID'); 
    var body = doc.getBody(); 
    var date = body.getListItems(); 
    var dates = []; 
    for(var i = 0; i<date.length;i++) 
    { 
    dates.push(date[i].getText()); 
    } 
    var form = FormApp.openById('THIS WAS MY ID'); 
    var items = form.getItems(); 
    var ss = SpreadsheetApp.openById("THIS WAS MY ID"); 
    Logger.log(ss.getName()); 
    var sheet = ss.getSheets()[0]; 
    var values = sheet.getSheetValues(2, 4, sheet.getLastRow() , 1); 
    Logger.log(values); 
    var names = sheet.getSheetValues(2, 2, sheet.getLastRow(), 1); 
    var item = items[2].asMultipleChoiceItem(); 
    var choices = item.getChoices() 
    for(var i=names.length; i>-1; i--){ 
    for(var j=names.length; j>-1; j--){ 
     if(names[i]==names[j] && i != j) 
     sheet.deleteRow(i); 
    } 
    } 
    var h = -1; 
    var j = -1; 
    var k = -1; 
    var l = -1; 
    for(var o = 0; o<values.length; o++){   
    if(choices[0].getValue().equals(values[o].toString())) 
     h++; 
    if(choices[1].getValue().equals(values[o].toString())) 
     j++; 
    if(choices[2].getValue().equals(values[o].toString())) 
     k++; 
    if(choices[3].getValue().equals(values[o].toString())) 
     l++; 
    } 
    if(h>3) 
    dates.splice(0,1); 
    if(j>3) 
    dates.splice(1, 1); 
    if(k>3) 
    dates.splice(2, 1); 
    if(l>3) 
    dates.splice(3, 1); 
    emptyDocument(); 
    Logger.log(h); 
    Logger.log(j); 
    Logger.log(k); 
    Logger.log(l); 
    item.setChoices([ 
    item.createChoice(dates[0]), 
    item.createChoice(dates[1]), 
    item.createChoice(dates[2]), 
    item.createChoice(dates[3]) 
]); 
    for(var i = 0; i<dates.length; i++) 
    body.appendListItem(dates[i]); 
    Logger.log(doc.getName()+" Contains:"); 
    Logger.log(dates); 
} 

是代碼是一個爛攤子,我敢肯定,它可以做一個更好的辦法,但重要的是,我可能能夠刪除重複的信息就行了。編譯器不會允許我這樣做,因爲電子表格鏈接到表單。有沒有解決的辦法?

回答

0

在缺失以下的嘗試被阻擋在片材接收形式的數據:

  • 刪除列的表單數據
  • 缺失與表單問題的行的 - 也就是,第1行

其他行可以隨意刪除。這種行爲對於腳本來說與用戶操作完全相同。

您的腳本嘗試刪除第1行,因爲它是越野車。我引用相關部分:

var names = sheet.getSheetValues(2, 2, sheet.getLastRow(), 1); 
    for(var i=names.length; i>-1; i++){ 
    for(var j=names.length; j>-1; j++){ 
     if(names[i]==names[j] && i != j) 
     sheet.deleteRow(i); 

姓名[我]在哪一行?它在第i + 2行,因爲i = 0對應於第2行。但是,您試圖刪除編號爲i的行,比預期的行高兩行。

此外,i>-1; i++是荒謬的;你需要i--那裏。


這是一個簡單的腳本,刪除重複的行;它已經過我的表單回覆測試。它從下到上遍歷「Form Responses 1」表格的內容;如果C列中的兩行具有相同的值,則較舊的一行將被刪除。我不小心不要試圖第1行

的缺失(原因在自下而上爲了做到這一點是爲了避免處理感動了,因爲其他人刪除的行。)

function deleteDupes() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName('Form Responses 1'); 
    var values = sheet.getDataRange().getValues(); 
    for (var i = values.length - 1; i > 1; i--) { 
    if (values[i][2] == values[i-1][2]) { 
     sheet.deleteRow(i); 
    } 
    } 
} 
+0

當我去刪除行,函數編譯得很好,但是當它實際運行時,它碰到這個錯誤:'不能用表單問題刪除行。考慮隱藏行。 (第23行,「代碼」文件)'所以我實際上不能使用deleteRow函數。 – Maxunm

+0

「表單問題行」是表單的第一行。這是唯一不能刪除的行。看到我的更新回答。 –

相關問題