我在Google电子表格上有两张纸。一个有很多信息和参考,另一个在列的第一个单元格中有相同的参考,下面有链接名称和链接。我试图通过让用户输入他们想要搜索的参考,然后在第二张表中搜索以找到参考并且有一个带有链接的弹出框来解决“没有多个超链接在一个单元格中”的限制。
到目前为止,我可以从第二个电子表格列中获取链接,并使用以下代码在弹出框中显示它们:
function main(){
var column = SearchAndFind()
showURL(getLinks(column))
}
function getLinks(col){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.setActiveSheet(ss.getSheets()[1]);
var cell = ss.getActiveCell();
var values = sh.getDataRange().getValues();
var myArray = []
for(n=1;n<values.length;++n){
var cell = values[n][col] ;
myArray.push(cell);
}
return myArray;
}
function showURL(data){
var app = UiApp.createApplication().setHeight(40+8*data.length).setWidth(200);
app.setTitle("Show URLs");
var panel = app.createVerticalPanel();
app.add(panel);
for(var d=0 ; d<data.length;d=d+2){
var link = app.createAnchor(data[d],data[(d+1)]);
panel.add(link);
}
var doc = SpreadsheetApp.getActiveSpreadsheet();
doc.show(app);
return;
}
当我将随机列号硬编码到getLinks函数并且它工作正常但我需要能够通过用户搜索第二张表中每列中第一个单元格来获取列号。
这是我现在的代码不起作用:
//I know that it will always be the second sheet on the spreadsheet
//Search the column headers on the second sheet
//When one matches, return the index
function SearchAndFind(){
//Make the 2nd sheet active
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.setActiveSheet(ss.getSheets()[1]);
var range = sh.getRange(1, 1, sh.getMaxRows(), 1);
var values = range.getValues();
//Get the user input for the text they want to search
var ui = SpreadsheetApp.getUi();
var search = ui.prompt('Enter the ID: ');
var searchString = search.getResponseText()
//for loop to iterate through the first row and find the matching cell
//return the index of that column
for (n = 0; n < values[0].length; n++){
var cell = values[0][n]
if (cell === searchString){
return n;
}
}
}
当我运行所有代码(包括不起作用的函数SearchAndFind
)时,弹出框会出现undefined
,无法链接。不可否认,我对Javascript没有很多经验,所以我觉得我不太了解这里的错误。
答案 0 :(得分:0)
您只拉一列,然后在列中检查匹配。
var range = sh.getRange(1, 1, sh.getMaxRows(), 1);
仅提供第一列。和
for (n = 0; n < values[0].length; n++){
查看这些列。所以你的值[0] .length 是 1 ,你的循环只运行一次。
您是尝试遍历第一列的所有行,还是遍历所有列的第一行。
此外,您应该将循环更改为
for (var n = 0; n < values[0].length; n++){