2013-10-12 61 views
0

這是我的第二個問題,因爲第一個問題已由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學習,但我似乎無法找到網絡上的解決方案..我認爲這將是一個討論的主題。 如果我能自動做到這一點,它每個月都會節省很多時間。這也將降低人爲錯誤的風險,因爲它會由電腦處理。

我希望有人能幫助我.. 謝謝。

回答

0

你有執行抄本(查看 - >執行抄本)觀察執行堆棧(任何錯誤將在那裏)。

以下代碼可能是有幫助的:

/* CODE FOR DEMONSTRATION PURPOSES */ 
function onEdit(e) { 
    var targetSheet = e.source.getSheetByName('money'), 
     range = e.range, 
     s = range.getSheet(), 
     lastColumn = s.getLastColumn(); 
    if (mustBeCopied(s.getName()) && range.getColumn() === 7 && e.value === 'RECEBER') 
    s.getRange(range.getRow(), 1, 1, lastColumn).copyTo(targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 1, lastColumn)); 
} 

根據需要調整。

+0

感謝您的回答。 但onEdit不適用於我,它不響應粘貼命令。另外,由於數據是手動插入到工作表中的,所以一旦第7列填充滿足條件的值,其餘的要填充的數據將不會被複制,因爲該功能已被觸發。 –

+0

@ DiogoSousa請儘量回答,例如,檢查執行記錄以查看錯誤。該行'var targetSheet = s.getSheetByName(「money」);'應該是錯誤的,因爲's'(Sheet)沒有getSheetByName方法。該代碼僅僅是將其應用於您的代碼的參考。 – wchiquito

+0

我明白你說什麼了,但getSheetByName在onEdit函數中沒有問題..那麼爲什麼現在不工作呢? –

相關問題