ArrayLib 未定义

ArrayLib is not defined

我是剧本写作的初学者。基本上我已经为我编写了几个脚本,多年来我一直能够管理这些脚本。然而,我使用 运行 多年的脚本突然停止工作。我所知道的一切都没有改变。 (老实说,我不知道我在看什么,甚至无法识别是否有东西)请如果有人可以提供帮助,我们将不胜感激。 ReferenceError:未定义 ArrayLib(第 50 行,文件“代码”) 拜托拜托

function OOU() {
var ss = SpreadsheetApp.openById("1L9f8wx3OYnry_UocEpBapuEmismMd6XYBO1Kl9e4duE");         
var unitsoou = ss.getSheetByName("ROSS_OOU_Import")  
var numRows = unitsoou.getDataRange();                       
var names = unitsoou.getRange(2, 4, 200).getDisplayValues();       

var sheetName = PropertiesService.getScriptProperties().getProperty("1");
var unitSched = ss.getSheetByName(sheetName);               
PropertiesService.getScriptProperties().setProperty("1", "UNIT_427")


var currentDate =  Utilities.formatDate(new Date(), "GMT+1", "MM/dd/yyyy");     
var changeDate = unitSched.getRange(4,38).getValue();                           
var newChangeDate = new Date(changeDate.getTime() + 3600000*24)                
var newChangeDate = Utilities.formatDate(newChangeDate, "GMT+1", "MM/dd/yyyy");
if (newChangeDate == currentDate) {                                              
var wp = unitSched.getRange(1,1).getValue();                                    
wp = wp + 1                                                                   
var newSheetName = "UNIT_" + wp                                               
PropertiesService.getScriptProperties().setProperty("1",newSheetName)         
unitSched = ss.getSheetByName(newSheetName)                                  
}
unitSched.getRange(7,2,530,3).clearContent()                 
for (i =7; i <= 530; ++i) {                                  
var name2 = unitSched.getRange(i, 40).getValue()           

if (name2 != "#N/A" & name2 != "") {                       

var findName = ArrayLib.indexOf(names, 0, name2);      
    
  
    
if (findName >= 0){                                     
        
var incident = unitsoou.getRange(findName + 2 , 1).getDisplayValue()      
var reqNumber = unitsoou.getRange(findName + 2, 3).getDisplayValue()      
unitSched.getRange(i, 2).setValue("OOU")                           
unitSched.getRange(i, 3).setValue(incident)                         
unitSched.getRange(i, 4).setValue(reqNumber)                        
        
}
}
}  
}

function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Run ROSS OOU')
.addItem('ROSS OOU', 'OOU')
.addToUi();
}

解释/问题:

最初,我以为你打错了,但我才意识到你正在使用这个外部库:2D Arrays Library

很可能您还没有安装该脚本的库。那么,在这种情况下,您可以按照我提供的 link 中的说明进行操作。

然而,阅读这个库的文档,我发现 ArrayLib.indexOf(names, 0, name2) 是如何工作的:

基本上你传递 names 这是你的二维数组(但在这种情况下是一个列数组),然后你传递索引,它是要查找的列号(在你的情况下 0列)然后 name2 是要搜索的值。嗯,你不需要图书馆来做到这一点。可以自己直接使用内置的indexOf方法

解决方案:

替换:

var findName = ArrayLib.indexOf(names, 0, name2);

搭配:

var findName = names.flat().indexOf(name2);

本质上,我们直接flatten the array to make it 1D so we can then work with indexOf并获取name2出现在names中的第一个索引,如果不存在则获取-1

  • 这将执行 helper/library 代码将执行的操作,您不再依赖于此外部库。

  • 假设您的其余代码可以正常工作,并且据我所知,您没有在其他任何地方使用此 ArrayLib 库的方法,您的代码在之后应该可以正常工作这个修改。

请记住,您的代码需要大量改进,因为它迭代地使用 API 方法并且它不遵守 Best Practices。但是,代码的优化与您的问题或本网站无关(除非那是解决方案本身的一部分)。我建议您学习一些 Google Apps 脚本,这样您就可以优化您的代码,而且在需要时 maintain/modify 它也可以。