首页 > 解决方案 > 使用 .indexOf() 定义 .getRange()

问题描述

我目前正在尝试使用.indexOf数组.getValues()值来定义我想要复制超链接的单元格(作为概念证明)。

代码如下所示:

var descriptionColumn = headerArray[0].indexOf("Description")
sheet.getRange(sheet.getLastRow() + 1, descriptionColumn + 1).setFormula('=HYPERLINK("www.google.com"; "Test")')
Logger.log(descriptionColumn)

headerArray 填充如下:

var headerArray = sheet.getRange(1, 1, 1, lastColumn).getValues();

现在日志向我显示,descriptionColumn返回为“3.0”。位置 3 是正确的,但我不确定“.0”是否与下一个代码混淆。因为每当我descriptionColumn在该.setFormula区域进行更换时,我的代码都会起作用。知道我做错了什么以及如何解决吗?我.indexOf()在其他地方使用引用另一个数组的索引没有问题。只有在这里我不让它工作..

编辑:可重复的示例和发现。非常感谢您迄今为止的所有帮助,很抱歉这么晚才回来!

同时我发现,其中一个问题是 sheet.getLastRow() 之后的“+ 1”

sheet.getRange(sheet.getLastRow() + 1, descriptionColumn + 1).setFormula('=HYPERLINK("www.google.com"; "Test")')

老实说,我还不完全理解为什么会这样,但是通过将它定位在我的代码的最后(这样插入时它确实是 lastRow,我能够解决这个问题(将它保存在一个单独的变量中,例如与“descriptionColumn”一样也没有帮助..)。我理解 .getLastRow 返回一个整数,所以理论上 + 1 操作应该不是问题,对吧?很高兴知道我是否有问题。

所以最后用下面的代码我能够按计划插入超链接。确实从 .setValue 而不是 .setFormula 开始确实对我有很大帮助,所以谢谢!:)

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var headerArray = sheet.getRange(1, 1, 1, lastColumn).getValues();
var projectRef = "TEST123"
var folderID = DriveApp.getFolderById("SOME FOLDERID").createFolder(projectRef).getId()
var descriptionColumn = parseInt(headerArray[0].indexOf("Description"))
sheet.getRange(sheet.getLastRow(), descriptionColumn + 1).setFormula('=HYPERLINK("https://drive.google.com/drive/folders/' + folderID + '"; "' + projectRef + '")')

标签: javascriptarraysgoogle-apps-scriptgoogle-sheets

解决方案


但我不确定“.0”是否与下一个代码混淆

不,这不是问题

只有在这里我无法正常工作

我们看不到您的错误,或描述出了什么问题。

--- 调试步骤: ---

  1. 将 .setFormula 替换为 .setValue("Test") 以查看您是否针对正确的单元格(列)

  2. 如果可行,那么问题出在您的公式中


推荐阅读