如何将A1表示法结果转为带$的绝对引用,避免公式复制偏移
如何将Google Apps Script获取的A1表示法转换为绝对引用($T$1形式)
我有一行日期(A1:AA1),想用Google Apps Script找到今日日期的位置,然后用这个位置插入公式,再通过copyTo复制到同列最后一行。但复制后公式里的单元格会从T1变成T2、T3,没法固定位置。现有的代码能找到今日日期并返回类似[T1]的A1表示法,怎么把它改成$T$1这种绝对引用格式?
原代码如下:
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("DB"); var date = Utilities.formatDate(now, 'GMT-5', 'dd/MM/yyyy'); var ranges = sheet.createTextFinder(date).findAll().map(r => r.getA1Notation()); sheet.getRangeList(ranges).activate(); Logger.log(ranges)
解决方案
只需要修改map方法里的逻辑,把获取到的A1表示法拆分为列字母和行号,分别加上$符号再拼接即可。另外注意原代码里now变量未定义,需要先声明:
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("DB"); var now = new Date(); // 补充定义当前日期变量 var date = Utilities.formatDate(now, 'GMT-5', 'dd/MM/yyyy'); var ranges = sheet.createTextFinder(date).findAll().map(r => { const a1Notation = r.getA1Notation(); // 正则拆分列字母和行号 const matchResult = a1Notation.match(/([A-Z]+)(\d+)/); if (matchResult) { const column = matchResult[1]; const row = matchResult[2]; return `$${column}$${row}`; // 拼接成绝对引用格式 } return a1Notation; // 匹配失败时返回原格式 }); sheet.getRangeList(ranges).activate(); Logger.log(ranges)
这样处理后,日志里会输出类似[$T$1]的结果,用这个绝对引用插入公式后,执行copyTo复制时,公式里的单元格位置就会固定不变,不会随复制行数偏移。
内容的提问来源于stack exchange,提问作者fogueira87
相关产品推荐
相关产品推荐

