首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google自动创建显示一行父工作表的新工作表

Google自动创建显示一行父工作表的新工作表
EN

Stack Overflow用户
提问于 2022-05-03 01:23:37
回答 1查看 131关注 0票数 1

我有一个Google表单,可以将数据保存到Google表中。该表格由在线班的学生填写。

他们的老师定期将额外的数据添加到谷歌单子的每一行,以跟踪他们的出勤率。我希望能够与每个学生共享数据的只读镜像,这样他们只能看到自己的数据。(来自给定学生的所有数据都在工作表的一行中)。

我知道这可以通过为每个学生创建一个新的工作表来手动完成,使用=IMPORTRANGE()将他们的数据行镜像到工作表中,并与学生共享到工作表的链接。但是,考虑到需要手动创建的工作表数量,这是不可行的。

是否有一种方法可以自动与人共享有限的部分数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-03 02:18:52

此脚本将创建每行电子表格,并将其第一行等同于原始电子表格(标头)的第一行,并在其第二行使用IMPORTRANGE。然后将该行中的电子邮件作为查看器添加到新创建的电子表格中。

剧本:

代码语言:javascript
运行
复制
function exportData() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();
  var header = values.shift();
  var ssId = spreadsheet.getId();

  values.forEach((row, index) => {
    var newName = `Data: ${row[2]}, ${row[1]}`;
    var files = DriveApp.getFilesByName(newName);
    // file is already existing
    if (files.hasNext()) 
      return;

    var newSpreadsheet = SpreadsheetApp.create(newName);
    var newSheet = newSpreadsheet.getActiveSheet();
    var rowNum = index + 2;
    var newSsId = newSpreadsheet.getId();
    // append header to new file's first row
    newSheet.appendRow(header)
    // use importrange on A2
    newSheet.getRange(2, 1).setFormula(`=IMPORTRANGE("${spreadsheet.getUrl()}", "${sheet.getSheetName()}!A${rowNum}:${rowNum}")`);
    // add permission to automatically allow access to importrange
    addImportrangePermission(ssId, newSpreadsheet.getId());
    // add the email in the third column as the viewer
    DriveApp.getFileById(newSsId).addViewer(row[5]);
  });
}

function addImportrangePermission(donorId, ssId) {
  // adding permission by fetching this url
  const url = `https://docs.google.com/spreadsheets/d/${ssId}/externaldata/addimportrangepermissions?donorDocId=${donorId}`;
  const token = ScriptApp.getOAuthToken();
  const params = {
    method: 'post',
    headers: {
      Authorization: 'Bearer ' + token,
    },
    muteHttpExceptions: true
  };
  
  UrlFetchApp.fetch(url, params);
}

原始电子表格:

样本输出:

新电子表格内容示例:

注意:

如果电子邮件无效,则基于示例data

  • addViewer更新
  • 脚本将失败,因此请确保使用此脚本。确保调整传递给row的列以避免失败。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72093967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档