复制/重命名google sheet,share&在表单中使用脚本获取共享ID

时间:2015-07-22 17:33:36

标签: google-sheets

脚本是否可以复制/重命名(无关的)Google电子表格,与给定的电子邮件共享(最好先测试是否存在与给定电子邮件关联的Google帐户),然后保存共享网址?我已经花了几个小时而无法找到答案的任何部分:没有关于复制/重命名,没有关于共享ID的任何内容。我可能会遗漏一些关键字或其他东西。我知道我可能会对一般性问题进行投票,但我认为这是唯一的Google Script支持。如果你给我一个帖子,我会跟着它。

1 个答案:

答案 0 :(得分:0)

所以:我不得不弄明白这一点,最后聘请了一些人为我编写代码片段,这就是我所得到的。这对我来说非常好。我做了一点定制。

这是要求: 鉴于2张Google表格,GTemplate& GTracker(这是两个单独的电子表格,而不是同一电子表格中的标签)。创建一个表单(报告给GTracker中的选项卡/表单),用户(任何人)在线填写电子邮件“UserEmail”和字符串“UserID”。提交后: 1)制作GTemplate的副本,并将其重命名为“GTUserID”(如果GTUserID已存在,则将其命名为GTUserID1,2或其他) 2)检查提交的电子邮件是否具有关联的Google帐户 3)与UserEmail共享GTUserID 4)将GTUserID的URL保存到GTracker 5)向UserEmail发送电子邮件,确认上述成功或失败

    //************ Edit here *******************************

    var stremplateID = '1PBO9KhoZa9iX3Uik-FxXGnvhgs0BoNQUJmV95UUg56o';

    //******************************************************



function onOpen() {
  var ui = SpreadsheetApp.getUi();

  ui.createMenu('Initialization')
      .addItem('Initialize', 'setTrigger')
      .addToUi();
}


function setTrigger(){

var arr=   ScriptApp.getProjectTriggers();

for (var i= arr.length; i>0; i--){
ScriptApp.deleteTrigger(arr[i-1])
}


 ScriptApp.newTrigger('onFormSubmit')
          .forSpreadsheet(SpreadsheetApp
          .getActiveSpreadsheet().getId())
          .onFormSubmit()
          .create()
}




function onFormSubmit(e) {

    try {

        //Logger.log(JSON.stringify(e))

        var folder;
        var strEmail = e.namedValues.Email;
        var strUID = e.namedValues['User ID'];
        //Logger.log(strEmail)
        //Logger.log(strUID)

        var oldFile = DriveApp.getFileById(stremplateID);
        var folders = oldFile.getParents();
        while (folders.hasNext()) {
                folder = folders.next();
                break;
        }

            if ((typeof folder) != "object") {
                folder = DriveApp.getRootFolder();
            }

            var bolFlag = false;
            var bolFlag1 = false;
            var i = 0;

            var myRegexp = new RegExp('[^a-zA-Z0-9.-]','g');
            var strProcUID=String(strUID).replace(myRegexp, "_");
            //Logger.log(strProcUID)

            var strFilename = strProcUID;
            while (!bolFlag) {
                var files = folder.getFiles();
                while (files.hasNext()) {
                    var file = files.next();
                    if (file.getName() == strFilename) {
                        bolFlag1 = true;
                    }
                }

                if (!bolFlag1) {
                    bolFlag = true;
                } else {
                    i = i + 1;
                    strFilename = strProcUID + i;
                    bolFlag1 = false;
                }
            }

            var newFile = oldFile.makeCopy(strFilename, folder);
            newFile.addEditors(strEmail);

            var link = newFile.getUrl();

        var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
        var row = sh.getLastRow();
        var col = sh.getLastColumn();

        sh.getRange(row, col, 1, 1).setValue(link);

        var body = 'Dear ' + strUID + ',\n' +
            'Your request has been processed successfully.\n' +
            'The file can be seen here:\n' +
            link + '\n' +
            'Regards,\n ' +
            'Admin';

            GmailApp.sendEmail(strEmail, 'Request Processed', body);

    } catch (e) {

        var body = '\n' +
            'An error occurred while processing the request:\n' +
            'User ID: ' + strUID + '\n ' +
            'Email: ' + strEmail + '\n ' +
            'Error: ' + e;

            GmailApp.sendEmail(Session.getEffectiveUser().getEmail(), 'Error processing a request', body);

            var body = 'Dear ' + strUID + ',\n' +
            'Sorry, an error occurred while processing your request.\n' +
            'Regards,\n ' +
            'Admin';

            GmailApp.sendEmail(strEmail, 'Error processing the request', body);

    }
}

也许这对其他人有帮助。我无法找到的事情是将复制/共享的Google表格URL复制到另一张表格中(用于为项目团队发起的不同项目创建子女共享文档,仍然由管理员帐户拥有,内部字段很容易因为我们有URL,所以可访问。我希望这很清楚,也很有帮助。