這是我的第二個問題,因爲第一個問題已由patt0解決,謝謝!在電子表格或電子表格中的特定工作表上運行腳本,並有條件地將數據拉到另一個工作表
我有一個編輯工作腳本,檢查每次我編輯工作表,如果列號的任何單元格的值。 7改爲「RECEBER」,它會將整行拖到另一張紙上。起初,我希望能爲我工作,但很快就發現onEdit有一些限制,與我想要做的不兼容。
因爲我不能依賴onEdit,所以我希望從創建的菜單(由patt0建議)運行腳本。這可以一次完成,整個spredsheet,也一張一張地完成(我相信兩者的解決方案都是相似的,這兩種方式對我來說都非常方便)。
這裏是我的代碼(不工作 - 改編自先前的編輯代碼):
這第一部分是存儲工作表名稱,以檢查它是否是1到31之間;
function mustBeCopied(sheetName) {
var sheetNumber = parseInt(sheetName);
if (sheetNumber <=31 && sheetNumber >=1)
return true;
return false;
}
第二部分可能是一些問題,因爲它是由onEdit函數提供的。
function RECEBER() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); // stores the active spreadsheet (where the script is being ran)
var s = ss.getActiveSheet(); // stores the Active sheet within the stored spreadsheet
var r = ss.getActiveRange(); // stores the range of rows in my document ?
if(mustBeCopied(s.getName()) && r.getColumn() == 7 && r.getValue() == "RECEBER") { // if mustBeCopied, when applied to the sheet defined in the s variable is satisfied, it will check on every row if the value "RECEBER" is in its 7th column.
var row = r.getRow(); // stores the row that satisfied the condition
var numColumns = s.getLastColumn(); // stores the last column on the sheet ?
var targetSheet = s.getSheetByName("money"); // sets the target sheet
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); // gets range on the target sheet and adds one more row for the new data to be inserted
s.getRange(row, 1, 1, numColumns).copyTo(target); // writes the data into the target sheet, but I don't understand how..
}
}
我做一步步的分析,看看如果我的理解發生了什麼事..
我敢肯定,這可以很容易地完成,並且很wiling學習,但我似乎無法找到網絡上的解決方案..我認爲這將是一個討論的主題。 如果我能自動做到這一點,它每個月都會節省很多時間。這也將降低人爲錯誤的風險,因爲它會由電腦處理。
我希望有人能幫助我.. 謝謝。
感謝您的回答。 但onEdit不適用於我,它不響應粘貼命令。另外,由於數據是手動插入到工作表中的,所以一旦第7列填充滿足條件的值,其餘的要填充的數據將不會被複制,因爲該功能已被觸發。 –
@ DiogoSousa請儘量回答,例如,檢查執行記錄以查看錯誤。該行'var targetSheet = s.getSheetByName(「money」);'應該是錯誤的,因爲's'(Sheet)沒有getSheetByName方法。該代碼僅僅是將其應用於您的代碼的參考。 – wchiquito
我明白你說什麼了,但getSheetByName在onEdit函數中沒有問題..那麼爲什麼現在不工作呢? –