【发布时间】:2017-09-29 22:50:26
【问题描述】:
这是我在这里的第一个问题。据我所知,我已经搜索了该网站,但没有找到我的问题的任何其他示例。
这是 Google 表格文件 https://docs.google.com/spreadsheets/d/1HxyhoxuPK8H8_vhLg0ZZ-THyOn1cn9nPYRyls8y47iM/edit?usp=sharing
我在同一个 Google 表格文档中有 2 张表格。 第一个,“模式”包含一个教师的基础学校时间表,在不同的街区有不同的班级。这需要复制,以便所有教师都具有这种精确设置 - 以便所有唯一用户拥有相同的 50 行日程安排数据 - 仅限于分配给他们的班级。
第二张表包含有关用户的信息。每行包含一个 UNI 登录用户名及其指定的类 1a-1、4a-1 和 8a-1,例如用户 uni12345。 1a-1 需要替换“uni12345”的日程数据中的1。
我希望将所有这些数据(很多行)合并到一张表中,fx。称为“组合”-但您可以选择名称:-)
我制作了一个组合示例表,显示了我希望列表中 user1+2 的输出。
如果问题已经在其他地方得到部分回答,我也很乐意看看!
编辑: 自从我最初的问题以来,我已经让它工作了——只是现在我达到了 6 分钟的脚本执行时间限制。任何解决方法,例如。优化?
function merge() {
var CurrentDate = new Date() ;
var CurrentDateString1 = Utilities.formatDate(CurrentDate, "GMT", "MM-dd-yyyy HH:mm:ss") ;
var ss=SpreadsheetApp.getActive();
// var mergeSht=ss.getSheetByName(CurrentDateString1);
var users=ss.getSheetByName('users');
var schema=ss.getSheetByName('schema');
var mergeSht = ss.insertSheet();
mergeSht.setName(CurrentDateString1);
var usersValues = users.getDataRange().getValues();
var schemaValues = schema.getDataRange().getValues();
var counter = 1;
for(var n=1; n < usersValues.length ; n++){
var usersValue = usersValues[n];
var uniName = usersValue[5];
var levelInd = usersValue[2];
var levelMellem = usersValue[3];
var levelUdsk = usersValue[4];
// Logger.log(usersValues[n][5])
for(var i=1; i < schemaValues.length ; i++){
var schemaValue = schemaValues[i];
if (schemaValue != null && schemaValue.length > 0) {
var level = schemaValue[3];
var subject = schemaValue[4];
var room = schemaValue[5];
var day = schemaValue[6];
var position = schemaValue[7];
var levelAfd = getlevel(level,levelInd, levelMellem, levelUdsk);
Logger.log(levelAfd);
// print
var row=[];
row.push(counter++,'','unilogin:'+ uniName, levelAfd, subject, room, day, position);
mergeSht.appendRow(row);
}
}
}
}
function getlevel(level, levelInd, levelMellem, levelUdsk){
switch (level)
{
case 1:
return levelInd;
case 4:
return levelMellem;
case 7:
return levelUdsk;
}
}
【问题讨论】:
-
我已经为这个问题添加了我的新解决方案;只是现在我在 Google Scripts 上达到了 6 分钟的最大执行时间。
-
执行记录是什么样的?
-
通过将 getLevel 的开关合并到主循环中,您可能会获得小的性能改进。但是,其余的代码对我来说看起来不错。您可能必须想办法将函数分解为连续运行的部分。也许 usersValues 中的某些内容可以让您在较小的部分中执行它们。
标签: google-apps-script google-sheets google-spreadsheet-api