【发布时间】:2021-01-16 01:38:28
【问题描述】:
上下文
所以我有一个包含 11 多张工作表的电子表格,不过稍后会添加更多。我想使用命名范围动态命名列。我创建了一个宏脚本并一直在使用它。唯一的问题是对于每张纸,我必须转到脚本并更改命名范围的名称:
function NamedRanges() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setNamedRange('TrainlineDate', spreadsheet.getRange('A:A'));
spreadsheet.setNamedRange('TrainlinePrice', spreadsheet.getRange('B:B'));
spreadsheet.setNamedRange('TrainlineReturns', spreadsheet.getRange('C:C'));
spreadsheet.setNamedRange('TrainlineGrossReturns', spreadsheet.getRange('D:D'));
spreadsheet.setNamedRange('TrainlineGeometricReturns', spreadsheet.getRange('E:E'));
spreadsheet.setNamedRange('TrainlineRisk', spreadsheet.getRange('F:F'));
spreadsheet.setNamedRange('TrainlineNegativeReturns', spreadsheet.getRange('G:G'));
spreadsheet.setNamedRange('TrainlinePositiveReturns', spreadsheet.getRange('H:H'));
spreadsheet.setNamedRange('TrainlineTimeValueMoney', spreadsheet.getRange('I:I'));
};
例如,对于下一个选项卡,我必须将 Trainline 更改为 Softcat。
我尝试将列创建为数组,然后使用 for 循环根据单元格 B2 中的名称 + 标题中的名称(每列的第 3 行)创建命名范围。将来我也会添加新的专栏。但是当我尝试在单元格B2 中记录值时,它失败了。长话短说,我被卡住了。到目前为止,这是我想出的;
function NamedRange() {
const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var col = ss.getLastColumn(); //Get all the columns in the sheet with data (there will be no gaps/spaces)
var stockName = ss.getRange("B1"); // name in cell B1 (column 2, row 1)
var headerCell = ss.getRange(3, col); // in row 3 of all columns
var rangeName = ss.getValue(stockName);
Logger.log(rangeName) // test to see if the value of stockname is picked up by Appscript
// For every column, get the values in 'stockName and headerCell' and create a named range from them.
An exception is for the second column, instead of 'Close' name, call it 'Stockname' + 'Price'.
};
这是电子表格格式的示例。此脚本将适用于 Aveva Group 选项卡以后。
问题
通常,电子表格的格式都相同。唯一的区别是股票的名称。我希望能够为每个选项卡/工作表的现有列和新列自动设置所有列的 namedRange,并使用自定义菜单触发它(这部分我可以自己整理)。有没有更好的方法来完成这项工作?
【问题讨论】:
标签: javascript google-apps-script google-sheets named-ranges