我有一个独特的情况。我正在创建一个低技术的工作管理系统。我有一张工作单"工作订单"其中标题后面的每一行都包含一个工单。但是,工作单可能需要几天时间。因此,我需要一张单独的工作表,显示每个工单的每日任务。因此,例如,如果工作订单是从1/12/17到1/14/17,我想在另一个工作表中自动创建三行来表示每一天。目的是能够根据每个日常任务分配工作人员。
这是我到目前为止所写的内容,但承认我不确定错误在哪里,或者我是否关闭。我肯定是业余爱好者。
在此示例中," Word订单" sheet是我的源表," Schedule"是我的目标表,AD和AE是具有开始和结束日期的列,AI是我的条件,IF"是"对于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中。
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);
}
}
注意 - 为了使其正常工作,您必须在工作订单表中选择整行数据。这看起来像是基于您的代码的预期工作流程,但是,我不确定这是否真的是意图。