我撰寫了一個函式,該函式在一個電子表格的一個應用程式腳本中作業,然后將其復制粘貼到另一個電子表格的另一個應用程式腳本中,但它不起作用,我收到錯誤:錯誤
例外:該范圍內的行數必須至少為1.(匿名)@Code.gs:5
功能是:
function validate()
{
var ss1=SpreadsheetApp.getActiveSpreadsheet();
var sht1=ss1.getSheets()[0]; // sheet where to create dropDown list
var ss4imp=SpreadsheetApp.openById('1wOo-ntaLOIcDrFuB9y3WwAOsRm1GyAFOcIacCewQfUo');
var sht4imp=ss4imp.getSheets()[0]; // sheet within the program containing the list of dropDown items
var sht2=ss1.getSheets()[1]; // sheet within the program containing the list of dropDown items
var lastRowOfImpItems = sht4imp.getLastRow();
Logger.log(lastRowOfImpItems);
var rng4=sht4imp.getRange(1,1,lastRowOfImpItems,1).getValues(); // range on a sheet outside the program containing the list of dropDown items
var rng1=sht1.getRange('A1'); // range (cell) where to create dropDown
var rng2=sht2.getRange(1,1,lastRowOfImpItems,1).setValues(rng4); // range on a sheet within the program containing the list of dropDown items
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(rng2).build();
rng1.setDataValidation(rule);
}
并且在一個簡單的 .gs 專案中運行良好,該功能是 .gs 專案中唯一的作業表功能:https ://docs.google.com/spreadsheets/d/1cEpLk-jEgWCIfSwzE??j5X0n3Q1OOJ_5MJr5vT257BHgI/edit?usp = sharing
但是當我將它復制粘貼到另一個 .gs 專案中時,它不是該專案中唯一的功能,它停止作業并引發錯誤:
錯誤
例外:范圍內的行數必須至少為 1。(匿名)@Code.gs:5
這發生在腳本中:
var active_spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var cell = sheet.getActiveCell();
var lastRow = sheet.getLastRow();
function onOpen()
{
var cellRow = cell.getRow();
var cellColumn = cell.getColumn();
var cellValue = cell.getValue();
sheet.getRange('O2').setValue('Klik tu in izberi akcijo')
.setFontColor("red")
.setFontWeight("bold")
.setBorder(true, true, true, true, true, true);
}
function validate()
{
// var ss1=SpreadsheetApp.getActiveSpreadsheet();
// var sht1=ss1.getSheets()[0]; // sheet where to create dropDown list
var ss4imp=SpreadsheetApp.openById('1wOo-ntaLOIcDrFuB9y3WwAOsRm1GyAFOcIacCewQfUo');
var sht4imp=ss4imp.getSheets()[0]; // sheet within the program containing the list of dropDown items
var sht2=active_spreadsheet.getSheets()[1]; // sheet within the program containing the list of dropDown items
var lastRowOfImpItems = sht4imp.getLastRow();
Logger.log(lastRowOfImpItems);
var rng4=sht4imp.getRange(1,1,lastRowOfImpItems,1).getValues(); // range on a sheet outside the program containing the list of dropDown items
var rng1=sheet.getRange(2,2,1,1); // range (cell) where to create dropDown
var rng2=sht2.getRange(1,1,lastRowOfImpItems,1).setValues(rng4); // range on a sheet within the program containing the list of dropDown items
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(rng2).build();
rng1.setDataValidation(rule);
}
function onEdit(e)
{
var row = e.range.getRow();
var column = e.range.getColumn();
var cellValue = e.range.getValue();
if(column == 15 && row == row && cellValue == "vrini vrstico na vrh" )
{
sheet.insertRowBefore(2);
cell.setValue('Klik tu in izberi akcijo');
sheet.getRange(2,column).setValue('Klik tu in izberi akcijo');
}
if(column == 15 && row == row && cellValue == "vrini vrstico nad trenutno" )
{
sheet.insertRowBefore(row);
cell.setValue('Klik tu in izberi akcijo');
sheet.getRange(row 1,column).setValue('Klik tu in izberi akcijo');
}
if(column == 15 && row == row && cellValue == "vrini vrstico pod trenutno" )
{
sheet.insertRowAfter(row);
cell.setValue('Klik tu in izberi akcijo');
sheet.getRange(row 1,column).setValue('Klik tu in izberi akcijo');
}
if(column == 15 && row == row && cellValue == "dodaj vrstico na konec" )
{
sheet.insertRowAfter(lastRow);
cell.setValue('Klik tu in izberi akcijo');
validate();
sheet.getRange(lastRow 1,column).setValue('Klik tu in izberi akcijo')
.setFontColor("red")
.setFontWeight("bold")
.setBorder(true, true, true, true, true, true)
.setWrap(true)
.setHorizontalAlignment("center");
sheet.getRange(lastRow 1,16).setValue(lastRow);
}
for (var i = 0; i <= lastRow-1; i = i 1)
{
sheet.getRange(i 2,1).setValue(lastRow-i);
}
}
function onChange(e){
const sh=e.source.getActiveSheet();
if(e.changeType == 'INSERT_ROW' || e.changeType == 'REMOVE_ROW')
{ if(sh.getName()=='Main')
{
for (var i = 0; i <= lastRow-1; i = i 1)
{
sheet.getRange(i 2,1).setValue(lastRow-i);
}
}
}
}
它在電子表格中不起作用(不創建下拉串列):https : //docs.google.com/spreadsheets/d/1ZXACv6TfPQuy9zmOIjIpNm1RVfpDaoBx5sIQGnOuPiQ/edit?usp=sharing
任何想法和提示都非常受歡迎:) tnx。
uj5u.com熱心網友回復:
我相信這只是您作業表腳本中第 15 行的一個錯字:
validte();
應該:
validate();
但是很難驗證,因為看起來有些資料是從另一個我無權訪問的電子表格加載的。
uj5u.com熱心網友回復:
如果您想使用 onEdit 觸發器呼叫函式 validate() 并且您希望該函式 validate() 創建一個包含來自另一個電子表格的專案的下拉串列,那么您必須將 onEdit 函式從簡單觸發器更改為可安裝觸發器,因為簡單觸發器無法訪問來自另一個電子表格的資料電子表格。只有可安裝的觸發器才能做到這一點。這就是為什么范圍的長度為 0 并且您收到錯誤的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369303.html
上一篇:GoogleScript函式計時
