【发布时间】:2021-12-11 23:27:39
【问题描述】:
这里是发布问题的新手,也是使用 Google 表格的 Apps 脚本的新手。
我正在尝试让一个宏基于以“~”开头的模板工作表创建一个新工作表。宏应该在另一张表的 A 列中找到以“Y”开头的任何内容。如果它有一个“Y”,它应该获取同一行但列 B 上的供应商名称值。然后这用于创建新工作表并为其命名。
下面的代码执行,但没有任何反应。我能够复制模板表,但在供应商表选项卡中添加搜索似乎导致了问题。任何帮助表示赞赏。我也提前道歉,第一次发帖所以不完全确定这一切都有意义。
function DuplicateSht() {
var Sect = 0
var Vend = 0
var sh = SpreadsheetApp.getActiveSpreadsheet()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var data = sh.getDataRange().getValues(); //
for (var i=0 ; i<sheets.length ; i++) {
SpreadsheetApp.setActiveSheet(sheets[i])
if (sheets[i].getName().startsWith("Vendor Sheet")){//locates sheet with base information
Sect = sh.getRange("C2").getValue();//pulls in section number
Vend = sh.getRange("C3").getValue();//pulls in number of vendors
for (var j=10 ; j<Vend+10; j++){
if(data[j][1] == "Y"){//Looks for each vendor with a "Y" in column A. The number of vendors to review is variable
var VendName = sh.getRange("B" + j).getValue();//If a vendor has a "Y" will grab their name
for (var k=0 ; k<sheets.length ; k++) {
SpreadsheetApp.setActiveSheet(sheets[k])
for (var l=0 ; l<Vend ; l++){
if (sheets[l].getName().startsWith("~")){
sh.duplicateActiveSheet()//duplicates the sheet beginning with "~"
sh.renameActiveSheet("x-" + VendName + " " + Sect)//renames the sheet based on the data from the prep template sheet, including vendor name
}
}
}
}
}
}
}
}
【问题讨论】:
-
我注意到您的
data变量在 ActiveSpreadsheet 上使用了getDataRange。这将只为您执行脚本时的活动工作表产生数据范围。在更新Sect和Vend变量之前,尝试将其移动到您的第一个if语句中。这应该会导致您正在评估的工作表的数据范围,并且您应该找到您正在寻找的内容。 -
谢谢。我更新以包含在这些变量之前的 if 语句中。我现在收到“无法读取未定义的属性 '1'”错误。它与它在 A 列中查找带有“Y”的任何内容的行有关。我还注意到通过调试我的 VendName 变量没有被赋值
-
您能分享一个指向您的工作表的链接吗?
-
我可以共享一张工作表。我怎么能在这里做到这一点?我发现其中一个问题是我没有使用“.getActiveSheet()”作为 getRange 来比较“Y”值。
标签: google-apps-script google-sheets getvalue