Google Sheets脚本如何为选中单元格区域批量生成谷歌地图超链接
完整可直接使用的代码
function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('我的功能按钮') // 可按需保留/删除单单元格选项,多单元格函数天然兼容单单元格场景 .addItem('生成单单元格谷歌地图链接', 'singleGoogleMaps') .addItem('批量生成谷歌地图链接', 'multiGoogleMaps') .addToUi(); } // 原有单单元格函数,已做兼容性优化 function singleGoogleMaps() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var activeCell = ss.getActiveCell(); var currentCellValue = activeCell.getValue(); if(currentCellValue != ""){ // 新增encodeURIComponent处理特殊字符,避免链接失效 var newCellValue = '=HYPERLINK("https://www.google.com/maps/search/?api=1&query='+ encodeURIComponent(currentCellValue) +'","'+ currentCellValue +'")' activeCell.setValue(newCellValue) } } // 新增多单元格适配函数,选中任意大小区域都可批量处理 function multiGoogleMaps() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var activeRange = ss.getActiveRange(); // 一次性读取选中区域所有值,返回二维数组结构为[行索引][列索引] var rangeValues = activeRange.getValues(); // 遍历处理每个单元格 for (var row = 0; row < rangeValues.length; row++) { for (var col = 0; col < rangeValues[row].length; col++) { var cellValue = rangeValues[row][col]; if (cellValue != "") { rangeValues[row][col] = '=HYPERLINK("https://www.google.com/maps/search/?api=1&query='+ encodeURIComponent(cellValue) +'","'+ cellValue +'")' } } } // 批量写入处理结果,比循环逐个写入性能高很多,选中大量单元格也不会卡顿 activeRange.setValues(rangeValues); }
优化说明
- 新增了
encodeURIComponent方法处理地址内容,就算地址里有空格、特殊符号也不会导致链接失效 - 多单元格函数采用批量读写逻辑,适配任意大小的选中区域,不需要单独维护单/多单元格两套逻辑
内容的提问来源于stack exchange,提问作者Bowe Bonney
相关产品推荐
相关产品推荐

