Javascript 根据activeUser,使用从其他工作表中选择的数据创建新的电子表格
首先,情况是这样的: 我有一份包含大量员工详细信息(数据库)的主数据表。G列包含电子邮件地址。我试图找到一种方法来分离/选择电子邮件地址与活动用户电子邮件地址匹配的行。用户没有任何机会更改任何内容 我在电子表格中尝试了不同的查询和导入方法(例如,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')。但在这种情
=Query(导入(“101kbFw_DQGjmxhrw7BHK5-SM5IShkddre7GdqEhc2-U”;“Data!A1:AC100”);“选择Col1、Col2、Col3、Col4,其中Col7='Pascal Richter')
。但在这种情况下,用户可以更改名称
因此,我尝试构建一个具有以下功能的Web应用程序:
createSSwithselectedData()
createSSwithselectedData()
创建一个新的电子表格createSSwithselectedData()
查找列g中activeUser和电子邮件匹配的行createSSwithselectedData()
将识别的数据传输到新的电子表格//记录活动用户的电子邮件地址
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});
}