0
我有一個電子表格,其中有一個清單要在事件發生前的60,30和1天填寫。這些表被稱爲「60天」,「30天」和「開球」。我試圖讓沒有被檢查的行自動添加到下一張表中(因此「60天」中的任何未經檢查的行都會被追加到「30天」,並且從「30天」到「開球」 - 同樣,通過「覈對」我的意思是一個「x」被輸入到一個單元格中)。我在代碼上有一個非常好的開端,但我一定是做錯了 - 因爲它似乎沒有做任何事情(原諒我的JavaScript無知,我的代碼入侵上週開始codecademy和一大堆瀏覽在這些論壇上)。我覺得我可能錯過了一些非常基本的東西,並且會歡迎我能得到的任何幫助。這是我得到的...有條件地將行復制到另一個工作表,並在更新行後將其刪除
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var r = ss.getActiveCell();
var i = 4;//have this number be your first row of data
if(r.getColumn()===5){ // this indicates the column that, if left blank, will mean the row should be copied to the next sheet
if (ss.getActiveSheet().getName()=="60-Day"){
var source_sheet = ss.getSheetByName("60-Day");
var target_sheet = ss.getSheetByName("30-Day");
var last_row = target_sheet.getLastRow();
while(i<=last_row){
if(source_sheet.getValue("E"+i)!="x"){
var source_range = source_sheet.getRange(i,2,1,6); // indicate the columns you'd like to copy
var target_range = target_sheet.getRange(last_row + 1,2,1,6); // indicate the columns where you'd like to paste
source_range.copyTo(target_range);
i++;
SpreadsheetApp.flush();
}else{
i++;
}
}
};
else if (ss.getActiveSheet().getName()=="30-Day"){
var source_sheet = ss.getSheetByName("30-Day");
var target_sheet = ss.getSheetByName("Kickoff");
var last_row = target_sheet.getLastRow();
while(i<=last_row){
if(ss.getValue("E"+i)!="x"){
var source_range = source_sheet.getRange(i,2,1,6);//indicate the columns you'd like to copy
var target_range = target_sheet.getRange(last_row + 1,2,1,6);//indicate the columns where you'd like to paste
source_range.copyTo(target_range);
i++;
SpreadsheetApp.flush();
}else{
i++;
}
};
}
}
}
所以那就是 - 這裏是我遇到更多麻煩的地方。如果一行已被推送到目標工作表並在目標工作表上檢查過,我希望它從目標工作表中消失,並且希望源工作表中的原始行現在顯示它已被檢查了。此外,如果在源表單上檢查到先前空白的行,我希望已推送到目標工作表的副本消失。這是我開始迷失方向的地方。我將如何去實施呢?
嘿布萊恩!感謝您的幫助。出於某種原因,它似乎沒有工作。無論如何,我意識到我沒有真正解釋自己。理想情況下,我喜歡將該項目保留在原始工作表和複製到的工作表上,並且如果它在任一位置都檢查完畢,我希望原始更新和副本消失。我也在重新思考整個onEdit觸發器。我現在要讓腳本可以從菜單中啓動。 – DaneC
如果您希望在所有工作表中刪除它們,則必須在每行中搜索與您正在檢查的行相匹配的值。 –
我最終做的是編寫4個不同的功能(每個功能從菜單中啓動),一個將信息從60天移至30天,一個將信息從30天移至啓動,一個重置30天,還有一個重置開球。我不得不採取一些硬編碼,並且腳本緩慢,因爲它貫穿每一行,但它的工作原理。它需要用戶比我想要的更警惕一些,但是可以正常工作。 – DaneC