![](/img/trans.png)
[英]Google Sheets Script to lock or unlock a row depending on the value in the cell of a column
[英]A google spreadsheet script that triggers on edit of a column in a sheet and overwrites the value of a user defined cell or not depending on the value
希望你一切都好。
我正在嘗試為我的辦公室寫一個不錯的腳本,因為我的同事缺乏紀律。
最好在工作表中的一列被編輯時觸發該腳本,但是如果它在工作表編輯或什至在電子表格編輯時觸發就可以。 該腳本應查看該工作表該列中的值,如果其中任何一個具有字符串“ On hold(i)”,“ On hold(ii)”或“ On hold(iii)”,則另一列上的單元格(由用戶選擇)在同一行上,應使用字符串“ TBC”覆蓋。 我試圖從谷歌和下面這是我所得到的,但是由於我在這里,顯然不起作用哈哈。 任何幫助將不勝感激 !! :((
function OnEdit() {
var a=1;
var ss = SpreadsheetApp.getActiveSpreadsheet();
while ( a<200 ){
if ( ss.getSheetByName('Active Jobs').getRange(a,12) == "On hold (i)" ) {
ss.getSheetByName('Active Jobs').getRange(a,15).setValues("TBC");
a=a+1;
}
}
}
我在Google上的某個地方讀到,如果對電子表格進行了編輯,則命名功能OnEdit將使函數觸發,但似乎不起作用。
function OnEdit() {
var a=1;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var activeCell = activeSheet.getActiveCell();
//Check if the sheet is a JOb sheet and the cell us the status cell
if (activeSheet.getName().indexOf("Job ID") != -1 && activeCell.getRow() == 2 && activeCell.getColumn() == 15){
var switchValue = activeCell.getValue();
switch (switchValue){
case "On hold (i)":
case "On hold (ii)":
case "On hold (iii)":
case "To be assigned":
//Write date to active jobs sheet
addDateToActive("TBC");
break;
case "In progress":
var newDate = Browser.inputBox("Please enter report out date");
addDateToActive(newDate);
break;
default:
Browser.msgBox("GOTHERE");
}
}
}
function addDateToActive(input){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var activeCell = activeSheet.getActiveCell();
var jobid = activeSheet.getRange(2,1).getValue().toString();
var activeJobSheet = ss.getSheetByName("Active Jobs");
var activeJobs = activeJobSheet.getRange(1,1,activeJobSheet.getLastRow(),1).getValues();
activeJobs = ColumnToArray(activeJobs);
var jobrow = activeJobs.indexOf(jobid)+1;
if (jobrow == -1){
Browser.msgBox("Job Id not preent on Active Jobs sheet");
}else{
activeJobSheet.getRange(jobrow,15).setValue(input);
}
}
function ColumnToArray(columnData){
//Ensure that the data supplied is a column
if(columnData[0].length == 1){
//Convert column to array
var dataout = [];
for (var a = 0; a < columnData.length; a++){
dataout.push(columnData[a][0]);
}
}else{
throw new Error("Data Supplied to ColumnToArray was not a simple Column");
}
return dataout;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.