Я пытаюсь создать небольшую систему организации выставления счетов-фактур, используя Google Sheets / Drive. У меня есть один лист, который я называю «задачами», из которого я планирую все контролировать. Некоторые из моих столбцов включают: «Клиент», «Проект», «Требования», «Детали», «Субподрядчик» ... По мере приобретения новых задач / клиентов я найду и добавлю информацию, соответствующую задаче («Проект»). "," Требования ") к другим листам или, если их нет, создайте папки, листы и добавьте соответствующую необходимую информацию из листа" задач "к новым листам. Некоторые листы будут отправлены субподрядчикам в зависимости от того, были ли обновлены их задачи или им были назначены новые на исходном листе «задач».
На листах, которые я отправляю субподрядчикам, будут поля для заполнения (ставка, эта ...), после заполнения я отправлю эту информацию на третий лист, чтобы применить некоторые наценки, дополнительные сборы, а затем отправить информацию обратно на исходный лист «задач», где она заполнит соответствующие ячейки. Как только вся необходимая информация в строке заполнена, она будет подготовлена и организована в счет-фактуру для клиента, указанного в столбце «клиент» ...
В любом случае, я пытался изучить javascript для реализации всего этого. Поскольку я планирую создавать папки, листы и добавлять информацию на основе значений, введенных в строках и столбцах листа «Задачи» ... Я поместил цикл for в функцию onEdit, которая выполняет следующие действия:
function onEdit(e) {
var ss = e.range.getSheet().getParent();
var sheet = e.range.getSheet();
var row = e.range.getRow();
var columns = [1, 2, 3, 4, 5, 6, 7, 8, 9];
//assign titles as 'keys' to array
var titles = []
//assign values of edited row to array
var values = []
//create an object to associate the title to the new edited values
var task = {}
for(var i in columns){
titles.push(sheet.getRange(1, columns[i]).getValue()); //push titles
values.push(sheet.getRange(row, columns[i]).getValue()); //push values of updated row
task[titles[i]] = values[i]; //add the values to their property names in task object
}
Это работает, и я могу ссылаться на задачу ["Клиент"], но я хотел бы поместить этот цикл в функцию, чтобы я мог использовать его снова. Я полагаю, что я мог бы обойтись без этого, но массив «столбцы» представляет только столбцы, которые я буду вводить в «первом раунде» --- когда я отправляю информацию ... Я буду вводить новую информацию в столбцы 10-15, затем 16-20, по мере выполнения задач ... и я хотел бы запустить цикл for для этих столбцов без необходимости создавать отдельные циклы. Для этого я создал функцию GetInfo ниже:
function GetInfo(row,column){
for(var i in column){
titles.push(sheet.getRange(1, column[i]).getValue()); //push titles
values.push(sheet.getRange(row, column[i]).getValue()); //push values of updated row
this.task[titles[i]] = values[i]; //add the values to their task
}
}
То, что я пытаюсь выполнить, похоже на то, что обрисовано в общих чертах здесь . Тем не менее, "for (var..in ..") не упоминается в примерах, и я думаю, что я что-то упустил. При попытке использовать функцию для первого массива столбцов я сделал это:
var list = new GetInfo(row,columns);
Я хотел бы сослаться на задачу следующим образом
list.task["client"]
Или var.task ["name"], но вышеприведенное не работает. Когда я принимаю тост за list.task ["Клиент] или пытаюсь добавить его в другую ячейку, ничего не происходит - оно пустое. Что я делаю не так? Как мне сделать это правильно? Что мне делать?
Любая помощь или руководство будет принята с благодарностью. пожалуйста.
(другие тосты работают, и соответствующая ячейка не пустая, без функции for var in works)