我有一个功能:
function reNameThisSheet() {
var active = SpreadsheetApp.getActiveSheet();
active.setName(active.getRange('A2').getValue());
}
我通过在脚本编辑器中按下运行按钮手动触发,执行它需要超过半分钟(32 - 33秒)=在所需的工作表上获得所需的名称。
我在电子表格中复制最后一张表后运行此函数,在运行此函数之前,我运行另一个函数,根据工作表索引设置A2中的值。
根据工作表的索引将值设置为A2的函数是本机公式:
=indirect("Category!B" & (ReturnSheetIndex()-1))
包括自定义公式ReturnSheetIndex():
function ReturnSheetIndex() {
var sheetIndex = SpreadsheetApp.getActiveSheet().getIndex();
Logger.log(sheetIndex);
return sheetIndex;
}
此功能我手动触发,以便在脚本管理器中指向它并单击保存,因此即时设置A2中的值。
在A2中的值立即设置后,函数reNameThisSheet()重命名由最后一页复制创建的工作表需要很长时间。
所有这些都发生在电子表格中: https://docs.google.com/spreadsheets/d/151TbRey12wGrbdfcGI14U50b5dNcJaHCX2UKRVv6teA/edit?usp=sharing
有条件的测试给出了以下结果:
当我关闭电子表格并再次打开它时,它甚至无法正确加载由复制过程创建的工作表:(
它挂起......
使用公式:
创建的工作表的标题=CONCATENATE(indirect("Category!C" & (1+findCell()))," od ", TEXT(MIN(E5:E),"dd.mm.yyyy") ," do ", TEXT(MAX(E5:E),"dd.mm.yyyy") ," :")
甚至没有出现:(
错误:加载数据...在每张纸的第一行中出现并保持这样:(
我认为功能存在问题:
function findCell() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Category");
var sheet1 = ss.getActiveSheet();
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
var student = sheet1.getRange("A2").getValue();
for (var i = 0; i < values.length; i++) {
var row = "";
for (var j = 0; j < values[i].length; j++) {
if (values[i][j] == student) {
row = values[i][j+1];
return i;
}
}
}
}
在创建使用复制创建的工作表的第1行中的标题时包含了该内容。
但很有趣:如果我在重新打开电子表格后尝试复制最后一张,那么一切正常。
只有在关闭和重新打开之前创建的工作表没有加载函数findCell()的问题。
任何想法为什么会这样非常感激。感谢名单。
答案 0 :(得分:1)
通过创建自定义菜单选项&#34;自定义 - &gt;解决了我的问题重复和姓名&#34;将预先设计的模板表复制到所有工作表的末尾,并从&#34;类别&#34;中的名称列表中命名。根据同时创建的工作表索引,只需点击两次鼠标
我花了一个星期的谷歌搜索和研究,并在这里共同努力
function duplicateName() {
var menu = [{name: "Duplicate and Name", functionName: "dupName"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
}
function dupName() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var totalSheets = ss.getNumSheets();
var lastSheet = ss.getSheets()[totalSheets-1];
var currentSheet = SpreadsheetApp.setActiveSheet(lastSheet);
var templateSheet = ss.getSheetByName("Template");
var getNameFromSheet = ss.getSheetByName("Category");
// var name = Browser.inputBox('Enter new sheet name');
var getNameFromRow = SpreadsheetApp.getActiveSheet().getIndex()-1;
var name = getNameFromSheet.getRange(getNameFromRow, 2).getValue();
var dateCell = getNameFromSheet.getRange(getNameFromRow, 2);
var ui = SpreadsheetApp.getUi();
if (dateCell.isBlank()) {
var result = ui.alert(
'Vse Kategorije so že odprte',
'Ni več možno ustvariti nove kartice!',
ui.ButtonSet.OK);
} else {
ss.insertSheet(name, {template: templateSheet});
}
}
它作为魅力:
https://docs.google.com/spreadsheets/d/1Kte7OU0WB-u8fDhASWDLQzLJaf7dSRvxUgRfY5pIObg/edit?usp=sharing