Попробуйте:
function checkOut() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getActiveSheet();
var name = sh.getRange("C2").getValue();
if(name && name.length>0 && getColumnHeight(1)>1) {
var basketrg = sh.getRange(2,1,getColumnHeight(1)-1,1);
var basket = basketrg.getValues();
var equipmentlist = sh.getRange(2,5,getColumnHeight(5)-1,1).getValues();
var availabilitylist = sh.getRange(2,6,getColumnHeight(6)-1,1).getValues();
for(var i=0;i<equipmentlist.length;i++) {
for(var j=0;j<basket.length;j++) {
if(equipmentlist[i][0]==basket[j][0]){
availabilitylist[i][0]=name;
}
}
}
sh.getRange(2,6,availabilitylist.length,1).setValues(availabilitylist);
setCameraList();
basketrg.clearContent();
sh.getRange('C2').clearContent()
}else{
SpreadsheetApp.getUi().alert('Invalid Input: No name provided or no cameras selected in checkOut() function.');
}
}
function getColumnHeight(col,sh,ss){
var ss=ss || SpreadsheetApp.getActive();
var sh=sh || ss.getActiveSheet();
var col=col || sh.getActiveCell().getColumn();
var rg=sh.getRange(1,col,sh.getLastRow(),1);
var vA=rg.getValues();
while(vA[vA.length-1][0].length==0){
vA.splice(vA.length-1,1);
}
return vA.length;
}
Простая система CheckOut
Чтобы настроить эту систему, вам нужно будет скопировать все приведенные ниже сценарии в файл Code.gs в редакторе сценариевэлектронная таблица.Назовите свой лист «CheckOut».Вы также захотите создать именованный диапазон с именем «AvailableCameras», и этот диапазон будет «CheckOut! K2: K1000» и проверка данных для «CheckOut! A2: A20» или настолько большой, насколько вы хотите, чтобы ваша корзина была.
Вы можете добавить столько камер, сколько пожелаете (в разумных пределах ... чем больше вы добавляете, тем медленнее работает).По мере того, как вы проверяете камеры, список выбора камер в вашей корзине уменьшается.Когда камеры будут возвращены, вы можете удалить имена из доступного списка, и система добавит для вас доступную метку, а также увеличит количество доступных камер.
Вот как выглядит электронная таблица:
Code.gs:
function onOpen() {
makeMenu();
}
function makeMenu(){
SpreadsheetApp.getUi().createMenu('My Tools')
.addItem('Check Out', 'checkOut')
.addItem('Set Camera List', 'setCameraList')
.addItem('Set Available List', 'setAvailableList')
.addToUi();
}
function checkOut() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getActiveSheet();
var name = sh.getRange("C2").getValue();
if(name && name.length>0) {
var basketrg = sh.getRange(2,1,getColumnHeight(1)-1,1);
var basket = basketrg.getValues();
var equipmentlist = sh.getRange(2,5,getColumnHeight(5)-1,1).getValues();
var availabilitylist = sh.getRange(2,6,getColumnHeight(6)-1,1).getValues();
for(var i=0;i<equipmentlist.length;i++) {
for(var j=0;j<basket.length;j++) {
if(equipmentlist[i][0]==basket[j][0]){
availabilitylist[i][0]=name;
}
}
}
sh.getRange(2,6,availabilitylist.length,1).setValues(availabilitylist);
setCameraList();
basketrg.clearContent();
sh.getRange('C2').clearContent()
}else{
SpreadsheetApp.getUi().alert('Invalid Input: No name provided in checkOut() function.');
}
}
function setCameraList() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('CheckOut');
var LISTrg=ss.getRangeByName('AvailableCameras');
var rg=sh.getRange(2,5,getColumnHeight(5)-1,2);
var vA=rg.getValues();
LISTrg.clear();
var listA=[];
for(var i=0;i<vA.length;i++) {
if(vA[i][1]=='Available') {
listA.push([vA[i][0]]);
}
}
sh.getRange(2,11,listA.length,1).setValues(listA);
}
function onEdit(e) {
var rg=e.range;
var sh=rg.getSheet();
var name=sh.getName();
if(name!='CheckOut'){return;}
if(rg.columnStart==1 && rg.rowStart>1) {
setCameraList();
}
if(rg.columnStart==6 && rg.rowStart>1) {
setAvailableList();
setCameraList();
}
}
function setAvailableList() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('CheckOut');
var rg=sh.getRange(2,6,getColumnHeight(5)-1,1);
var vA=rg.getValues();
for(var i=0;i<vA.length;i++) {
if(!vA[i][0] && vA[i][0].length==0) {
vA[i][0]='Available';
}
}
rg.setValues(vA);
}
function getColumnHeight(col,sh,ss){
var ss=ss || SpreadsheetApp.getActive();
var sh=sh || ss.getActiveSheet();
var col=col || sh.getActiveCell().getColumn();
var rg=sh.getRange(1,col,sh.getLastRow(),1);
var vA=rg.getValues();
while(vA[vA.length-1][0].length==0){
vA.splice(vA.length-1,1);
}
return vA.length;
}