0

私は独特の状況があります。私は、ローテクな仕事管理システムを作り出しています。私はシートの「作業オーダー」を持っています。このオーダーでは、ヘッダーの後ろにある各行に作業オーダーが含まれています。ただし、作業オーダーは数日かかることがあります。だから、私は毎月の仕事の順序ごとに毎日の仕事を示す別のシートが必要です。たとえば、作業オーダーが1/12/17から1/14/17までの場合、別のシートに3つの行を作成して、それぞれの日を表すように自動化したいと考えています。目的は、毎日の仕事に基づいて乗組員を割り当てることができるようにすることです。シートから行をコピーし、別のシートにマイナーチェンジして複数のバージョンを貼り付ける方法

これは私がこれまでに書いたものですが、どこにエラーがあるのか​​わかりません。私は確かにアマチュアです。

この例では、「ワードオーダー」シートはソースシート、「スケジュール」はターゲットシート、ADとAEは開始日と終了日の列、AIは条件付きです。 onEdit。

function onEdit(event) { 

    var ss = SpreadsheetApp.getActiveSpreadsheet() 
    var target = SpreadsheetApp.getActiveSpreadsheet() 
    var source_sheet = ss.getSheetByName("Work Orders"); 
    var target_sheet = target.getSheetByName("Schedule"); 
    var source_range = source_sheet.getActiveRange().getRow(); 
    var startdate = source_sheet.getRange("AD"+(source_range)); 
    var enddate = source_sheet.getRange("AE"+(source_range)); 
    var duration = enddate - startdate + 1 
    var event = (source_sheet.getRange("AI"+(source_range)); 
    var last_row = target_sheet.getLastRow(); 
    var target_range = target_sheet.getRange("A"+(last_row+1)+":AJ"+(last_row+1)); 

    if (source_sheet.getRange("AI"+(source_range)) == "Yes"); 
    target_sheet.insertRowAfter(last_row); 
    source_range.copyTo(target_range); 
    } 

私はこれをonEdit()トリガにする必要はありません。代わりに使用できるカスタムメニューアイテムがあります。このオプションを使用すると、私はAIの中で条件付きの "Yes"を必要としません。

function onOpen() { 

    SpreadsheetApp.getUi() 
     .createMenu('Triggers') 
     .addItem('Create Daily Task', 'CreateDailyTask') 
     .addToUi(); 
}; 

第一編集:それぞれが別個のものであることを示すために貼り付けられた行ごとに、日付の変更を持つ方法があるかどう

最後に、それはケーキの上のアイシングになります。

第二編集:

気づいていないものの、それが重要な場合、私は私の原点をシート「作業指示」は、自動的にそれをソートするスクリプトを持っていることも、言及します:

/** 
* Automatically sorts the 30th column (not the header row) Ascending. 
*/ 
function onEdit(event){ 
    var sheet = event.source.getSheetByName("Work Orders"); 
    var editedCell = sheet.getActiveCell(); 

    var columnToSortBy = 30; 
    var tableRange = "A2:AJ"; // What to sort. 

    if(editedCell.getColumn() == columnToSortBy){ 
    var range = sheet.getRange(tableRange); 
    range.sort({ column : columnToSortBy, ascending: true }); 
    } 
} 

すべてのヘルプは高く評価され。

+0

デバッガでこれを実行しましたか? –

答えて

1

コードにエラーがあり、必要なgetValueメソッドがありません。ここでは簡単微調整あなたが始めるためには、次のとおりです。

function CreateDailyTask() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet() 
    var source_sheet = ss.getSheetByName("Work Orders"); 
    var target_sheet = ss.getSheetByName("Schedule"); 
    var source_range = source_sheet.getActiveRange(); 
    var source_row = source_range.getRow(); 
    var source_data = source_range.getValues(); 
    var startdate = source_sheet.getRange("AD"+(source_row)).getValue(); 
    var enddate = source_sheet.getRange("AE"+(source_row)).getValue(); 
    var duration = enddate - startdate + 1 
    var event = (source_sheet.getRange("AI"+(source_row)).getValue()); 
    var last_row = target_sheet.getLastRow(); 
    var target_range = target_sheet.getRange("A"+(last_row+1)+":AJ"+(last_row+1)); 
    Logger.log(startdate+' '+enddate+' '+duration+' '+event); //use Logger to help you debug, this one puts the variables into the Logs (from View menu) 

    if (source_sheet.getRange("AI"+(source_row)).getValue() == "Yes") { 
    target_sheet.insertRowAfter(last_row); 
    source_range.copyTo(target_range); 
    } 
} 

注 - これが機能するためには、あなたが作業オーダーシートで選択したデータの行全体を持っている必要があります。それはあなたのコードに基づいてあなたの意図したワークフローのように見えますが、私はそれが本当に意図かどうかはわかりません。

関連する問題