循环处理单元格区域内的URL并隐藏对应表格指定列的脚本问题
解决Google Apps Script的"Missing variable name"错误及实现隐藏指定列功能
先修复你当前的语法错误
你遇到的Missing variable name. (line 8, file "Code")错误,根源在for循环的初始化语句里:你重复使用了var关键字来声明多个变量。在JavaScript中,for循环里初始化多个变量只需要一个var,多个变量用逗号分隔就可以了。
修复后的原功能脚本(获取表格标题)如下:
function getTitles() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Test2"); var urls = sheet.getRange("G3:G").getValues(); var titleList = [], newValues = [], response, doc, title; // 去掉了第二个var,只保留一个var声明多个变量 for (var row = 0, len = urls.length; row < len; row++) { if (urls[row] != '') { response = UrlFetchApp.fetch(urls[row]); doc = Xml.parse(response.getContentText(),true); title = doc.html.head.title.getText(); newValues.push([title]); titleList.push(title); Logger.log(title); } else { newValues.push([]); } } Logger.log('newValues ' + newValues); Logger.log('titleList ' + titleList); sheet.getRange("H3").offset(0, 0, newValues.length).setValues(newValues); return titleList; }
适配你实际需求的脚本(批量隐藏指定列)
看你的描述,你真正想实现的是遍历G列的Google Sheets URL,打开每个表格并隐藏指定列,下面是专门针对这个需求写的脚本,我加上了详细注释方便你理解:
function hideSpecifiedColumns() { // 获取当前活动表格和"Test2"工作表 var mainSs = SpreadsheetApp.getActiveSpreadsheet(); var mainSheet = mainSs.getSheetByName("Test2"); // 获取G3开始的所有URL数据 var urls = mainSheet.getRange("G3:G").getValues(); // 定义你想要隐藏的列,比如隐藏B列和D列,可以用列号[2,4],或者列名["B","D"] var columnsToHide = [2, 4]; // 这里用列号示例,列号从1开始计数 // 遍历每个URL for (var row = 0, len = urls.length; row < len; row++) { var sheetUrl = urls[row][0]; // 因为getValues返回的是二维数组,所以要取[0] if (sheetUrl) { // 跳过空行 try { // 通过URL打开目标表格 var targetSs = SpreadsheetApp.openByUrl(sheetUrl); // 获取目标表格的第一个工作表(如果要指定工作表名,可以用getSheetByName("Sheet1")) var targetSheet = targetSs.getSheets()[0]; // 循环隐藏指定的列 columnsToHide.forEach(function(colNum) { targetSheet.hideColumns(colNum); }); Logger.log(`已处理表格:${targetSs.getName()},隐藏了指定列`); } catch (e) { Logger.log(`处理表格${sheetUrl}时出错:${e.message}`); } } } }
一些注意事项:
- 确保你有这些目标表格的编辑权限,否则脚本会报错
- 如果要隐藏的列是用列名(比如"B"),可以先用
targetSheet.getRange("B1").getColumn()把列名转换成列号再传入 - 脚本执行时可能需要授权,第一次运行按照提示完成授权即可
内容的提问来源于stack exchange,提问作者Jake Underwood
相关产品推荐
相关产品推荐

