Javascript 根据activeUser,使用从其他工作表中选择的数据创建新的电子表格

Javascript 根据activeUser,使用从其他工作表中选择的数据创建新的电子表格,javascript,google-apps-script,google-sheets,web-applications,Javascript,Google Apps Script,Google Sheets,Web Applications,首先,情况是这样的: 我有一份包含大量员工详细信息(数据库)的主数据表。G列包含电子邮件地址。我试图找到一种方法来分离/选择电子邮件地址与活动用户电子邮件地址匹配的行。用户没有任何机会更改任何内容 我在电子表格中尝试了不同的查询和导入方法(例如,=Query(导入(“101kbFw_DQGjmxhrw7BHK5-SM5IShkddre7GdqEhc2-U”;“Data!A1:AC100”);“选择Col1、Col2、Col3、Col4,其中Col7='Pascal Richter')。但在这种情

首先,情况是这样的:

我有一份包含大量员工详细信息(数据库)的主数据表。G列包含电子邮件地址。我试图找到一种方法来分离/选择电子邮件地址与活动用户电子邮件地址匹配的行。用户没有任何机会更改任何内容

我在电子表格中尝试了不同的查询和导入方法(例如,
=Query(导入(“101kbFw_DQGjmxhrw7BHK5-SM5IShkddre7GdqEhc2-U”;“Data!A1:AC100”);“选择Col1、Col2、Col3、Col4,其中Col7='Pascal Richter')
。但在这种情况下,用户可以更改名称

因此,我尝试构建一个具有以下功能的Web应用程序:

  • 该脚本标识打开activeUser的用户
  • 按钮“向我发送数据”启动函数
    createSSwithselectedData()
  • 函数
    createSSwithselectedData()
    创建一个新的电子表格
  • 函数
    createSSwithselectedData()
    查找列g中activeUser和电子邮件匹配的行
  • 函数
    createSSwithselectedData()
    将识别的数据传输到新的电子表格
  • activeUser会收到一封带有新电子表格链接的电子邮件
  • 这是一个虚拟的

    非常感谢您的帮助:)

    //记录活动用户的电子邮件地址
    var email=Session.getActiveUser().getEmail();
    Logger.log(电子邮件);
    var DatabaseID=“101kbFw_DQGjmxhrw7BHK5-SM5IShkddre7GdqEhc2-U”;
    var Data=SpreadsheetApp.openById(“101kbFw_DQGjmxhrw7BHK5-SM5IShkddre7GdqEhc2-U”).getDataRange().getValues();
    Logger.log(数据);
    函数doGet(){
    var app=UiApp.createApplication();
    //创建一个按钮并给它一个点击处理程序
    var button=app.createButton(“发送数据!”).setId(“按钮”);
    addClickHandler(app.createServerHandler(“createSSwithselectedData”);
    应用程序添加(按钮);
    返回应用程序;
    }
    函数createSSwithselectedData(电子邮件){
    var app=UiApp.getActiveApplication();
    app.getElementById(“按钮”).setText(“数据正在传送”);
    返回应用程序;
    var SheetTemplate=“1Z-ECGaRXaO8mEjTCx74z4sXOc_B7ZU81qfhtVJ3TAic”;
    var SheetName=“作业组验证-”;
    var newSheetName=SheetName+电子邮件;
    var folderId=“0B45D8-yA6A-HTWF1MjNhZW1VaXM”
    var destination=DriveApp.getFolderById(folderId);
    var copyId=DriveApp.getFileById(SheetTemplate).makeCopy(newSheetName,destination.getId();
    var copySheet=SpreadsheetApp.openById(copyId);
    //这是一个用于收集数据的新阵列
    var target=新数组();
    
    对于(n=0;nWeb app方法不起作用的是什么?它是web app还是宏?日志显示,活动用户的电子邮件地址将正确读取并从数据表中获取值。但它不会创建新的工作表,也不会设置所选的值。宏是什么意思?宏提醒我使用excel。对不起,我放弃了t粘贴脚本:好的,你现在可以粘贴它吗?web应用方法有什么不起作用?它是web应用还是仅仅是一个宏?日志显示,活动用户的电子邮件地址被正确读取,并从数据表中获取值。但它不创建新表,也不设置所选值。使用宏是什么意思?宏提醒我使用excel。对不起,我忘了粘贴脚本:现在可以粘贴吗?
     // Log the email address of the active user
    var email = Session.getActiveUser().getEmail();
    Logger.log(email);
    
    var DatabaseID = "101kbFw_DQGjmxhrw7BHK5-SM5IShkddre7GdqEhc2-U";
    var Data       = SpreadsheetApp.openById("101kbFw_DQGjmxhrw7BHK5-SM5IShkddre7GdqEhc2-U").getDataRange().getValues();
    Logger.log(Data);
    
    
    
    function doGet() {
    var app = UiApp.createApplication();
    // create a button and give it a click handler
    var button = app.createButton("Send me data!").setId("button");
    
     button.addClickHandler(app.createServerHandler("createSSwithselectedData"));
       app.add(button);
       return app;
     }
    
       function createSSwithselectedData(email) {
       var app = UiApp.getActiveApplication();
       app.getElementById("button").setText("Data is on the way");
       return app;
    
      var SheetTemplate = "1Z-ECGaRXaO8mEjTCx74z4sXOc_B7ZU81qfhtVJ3TAic";
      var SheetName = "Jobgroup validation - ";
      var newSheetName = SheetName + email ; 
      var folderId = "0B45D8-yA6A-HTWF1MjNhZW1VaXM"
      var destination = DriveApp.getFolderById(folderId);
      var copyId =  DriveApp.getFileById(SheetTemplate).makeCopy(newSheetName,    destination).getId();
     var copySheet = SpreadsheetApp.openById(copyId);
    
      // this is a new array to collect data
      var target = new Array();
      for(n=0;n<data.length;++n){                                   //   iterate    in the array, row by row
       if (data[n][7]==email){ ;                                   // if   condition is true copy the whole row to target
                            target.push(data[n]);                // copy   the whole row
                           }                                     //if
      }                                                             //for
    
      copySheet.getRange(1,10,target.length,target[0].length).setValues();
    
      // Save and close the temporary document
      copySheet.saveAndClose();
    
      var url = copySheet.getUrl(); //DriveApp.getFileById(newFileId);
      var link = "<a href=\"" + url + "\">" + newSheetName + "</a>";
      var subject =  "Jobgroup validation - " +  email;
      var body    = "<p>You requested your team details. Please check the content.</p></br> " +  link;
      MailApp.sendEmail({to: email, subject: subject, htmlBody: body, name: alias, noReply: true}); 
    
      }