Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 找不到具有给定ID的项目_Google Apps Script_Google Drive Api - Fatal编程技术网

Google apps script 找不到具有给定ID的项目

Google apps script 找不到具有给定ID的项目,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,在最近的API更新后运行脚本时出现问题。我有一些问题,我可以在附近的帮助下解决,但现在我有一个通过ID的问题。我不确定它是从哪里来的,因为我有一些东西是通过ID得到的。有什么帮助吗?这是我的代码,如果你想运行它,以及错误的图片 如果你想运行它,你需要有一个名为Templates的文件夹,里面有一个文档。对于电子表格中的A列,文档的内部只需要是{A},它仍然会给您这个错误,谢谢 function generateDocument(e) { var template = DriveA

在最近的API更新后运行脚本时出现问题。我有一些问题,我可以在附近的帮助下解决,但现在我有一个通过ID的问题。我不确定它是从哪里来的,因为我有一些东西是通过ID得到的。有什么帮助吗?这是我的代码,如果你想运行它,以及错误的图片

如果你想运行它,你需要有一个名为Templates的文件夹,里面有一个文档。对于电子表格中的A列,文档的内部只需要是{A},它仍然会给您这个错误,谢谢

function generateDocument(e) {
        var template = DriveApp.getFileById(e.parameter.Templates);
        Logger.log(template.getName());
        var Sheet = SpreadsheetApp.getActiveSpreadsheet();
        var row = Number(e.parameter.row) //+1; // Remove the // in this line next to the +1 to skip headers
        Logger.log(row);
        var currentFID = e.parameter.curFID;
        Logger.log(currentFID);
        var myDocID = template.makeCopy(Sheet.getRange('B' + row).getValue() + ' - ' + Sheet.getRange('E' + row).getValue() + ' - ' + Sheet.getRange('D' + row).getValue() + ' - ' + Sheet.getRange('X' + row).getValue()).getId();
        var myDoc = DocumentApp.openById(myDocID);
        var copyBody = myDoc.getActiveSection();
        var Sheet = SpreadsheetApp.getActiveSpreadsheet();
        //row--; // decrement row number to be in concordance with real row numbers in sheet
        var myRow = SpreadsheetApp.getActiveSpreadsheet().getRange(row + ":" + row);
        for (var i = 1; i < Sheet.getLastColumn() + 1; i++) {
            var myCell = myRow.getCell(1, i);
            copyBody.replaceText("{" + myCell.getA1Notation().replace(row, "") + "}", myCell.getValue());
        }
        myDoc.saveAndClose();
        var destFolder = DriveApp.getFolderById(currentFID);
        Logger.log(myDocID);
        var doc = DriveApp.getFileById(myDocID); // get the document again but using DriveApp this time...
        doc.addToFolder(destFolder); // add it to the desired folder
        doc.removeFromFolder(DriveApp.getRootFolder()); // I did it step by step to be more easy to follow
        var pdf = DriveApp.getFileById(myDocID).getAs("application/pdf");
        destFolder.createFile(pdf); // this will create the pdf file in your folder
        var app = UiApp.getActiveApplication();
        app.close();
        return app;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getTemplates() {
        var doc = SpreadsheetApp.getActiveSpreadsheet();
        var app = UiApp.createApplication().setTitle('Generate from template');
        // Create a grid with 3 text boxes and corresponding labels
        var grid = app.createGrid(5, 2);
        grid.setWidget(0, 0, app.createLabel('Template name:'));
        var list = app.createListBox();
        list.setName('Templates');
        grid.setWidget(0, 1, list);

        var folders = DriveApp.getFoldersByName("Templates");
        while (folders.hasNext()) 
        {
          var folder = folders.next();
          Logger.log(folder.getName());
          var allMyFilesByType = folder.getFilesByType(MimeType.GOOGLE_DOCS)
        };
        while (allMyFilesByType.hasNext())
        {
          var file = allMyFilesByType.next();
          list.addItem(file.getName());
          Logger.log(file.getName());
        };

        grid.setWidget(1, 0, app.createLabel('Row:'));
        var row = app.createTextBox().setName('row');
        row.setValue(SpreadsheetApp.getActiveSpreadsheet().getActiveRange().getRow());
        grid.setWidget(1, 1, row);
        var curFN = app.createTextBox().setText('MyDrive/').setName('curFN').setId('curFN').setWidth('400');
        var curFID = app.createTextBox().setText(DriveApp.getRootFolder().getId()).setName('curFID').setId('curFID').setVisible(false);
        var listF = app.createListBox().setName('listF').setId('listF').addItem('Please Select Folder', 'x');
        grid.setText(2, 0, 'Type Path:').setWidget(2, 1, curFN).setText(3, 0, 'OR').setText(4, 0, 'Choose Path:').setWidget(4, 1, listF).setWidget(3, 1, curFID);
        var folders = DriveApp.getRootFolder().getFolders();
        while (folders.hasNext()) {
            var folder = folders.next();
            listF.addItem(folder.getName(),folder.getId())
        };
        var handlerF = app.createServerHandler('folderSelect').addCallbackElement(grid);
        listF.addChangeHandler(handlerF);
        var panel = app.createVerticalPanel();
        panel.add(grid);
        var button = app.createButton('Submit');
        var handler = app.createServerClickHandler('generateDocument');
        handler.addCallbackElement(grid);
        button.addClickHandler(handler);
        // Add the button to the panel and the panel to the application, then display the application app in the Spreadsheet doc
        panel.add(button);
        app.add(panel);
        doc.show(app);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function folderSelect(e) 
{
        var app = UiApp.getActiveApplication();
        var currentFN = e.parameter.curFN;
        var currentFID = e.parameter.listF;
        Logger.log(currentFID);
        var listF = app.getElementById('listF');
        var curFN = app.getElementById('curFN');
        var curFID = app.getElementById('curFID');
        if (currentFID == 'x') {
            currentFID = DriveApp.getRootFolder().getId();
            curFN.setText('MyDrive/')
        };
        var startFolder = DriveApp.getFolderById(currentFID);
        var folders = startFolder.getFolders();
        listF.clear().addItem('No More Sub Folders!', 'x').addItem('Go back to Root', 'x');
        if (folders.length > 0) {
            listF.clear();
            listF.addItem('Select Sub Folder', 'x')
        };
        while (folders.hasNext()) {
            var folder = folders.next();
            listF.addItem(folder.getName(),folder.getId())
        };
        curFN.setText(currentFN + DriveApp.getFolderById(currentFID).getName() + '/');
        if (currentFID == DriveApp.getRootFolder().getId()) {
            curFN.setText('MyDrive/')
        };
        curFID.setText(currentFID);
        return app;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onOpen() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var menuEntries = [{
        name: "Export Row to Document",
        functionName: "getTemplates"
    }];
    ss.addMenu("Generate Documents Here!", menuEntries);
}

函数生成文档(e){
var template=DriveApp.getFileById(e.parameter.Templates);
Logger.log(template.getName());
var Sheet=SpreadsheetApp.getActiveSpreadsheet();
var row=Number(e.parameter.row)//+1;//删除该行中+1旁边的//以跳过标题
Logger.log(行);
var currentFID=e.parameter.curFID;
Logger.log(当前FID);
var myDocID=template.makeCopy(Sheet.getRange('B'+行).getValue()+'-'+Sheet.getRange('E'+行).getValue()+'-'+Sheet.getRange('X'+行).getValue()).getId();
var myDoc=DocumentApp.openById(myDocID);
var copyBody=myDoc.getActiveSection();
var Sheet=SpreadsheetApp.getActiveSpreadsheet();
//行--;//减少行号,使之与工作表中的实际行号一致
var myRow=SpreadsheetApp.getActiveSpreadsheet().getRange(行+“:”+行);
对于(var i=1;i0){
listF.clear();
L
function generateDocument(e) 
{
        //Logger.log(DriveApp.getFilesByName(e.parameter.Templates).);
        //SpreadsheetApp.getUi().alert(e.parameter.Templates);
        var template = DriveApp.getFileById(e.parameter.Templates);
        //Logger.log(e.parameter.Templates.getId());
        var Sheet = SpreadsheetApp.getActiveSpreadsheet();
        var row = Number(e.parameter.row) //+1; // Remove the // in this line next to the +1 to skip headers
        Logger.log(row);
        var currentFID = e.parameter.listF;
        Logger.log(currentFID);
        var myDocID = template.makeCopy(Sheet.getRange('B' + row).getValue() + ' - ' + Sheet.getRange('E' + row).getValue() + ' - ' + Sheet.getRange('D' + row).getValue() + ' - ' + Sheet.getRange('X' + row).getValue()).getId();
        var myDoc = DocumentApp.openById(myDocID);
        var copyBody = myDoc.getActiveSection();
        var Sheet = SpreadsheetApp.getActiveSpreadsheet();
        //row--; // decrement row number to be in concordance with real row numbers in sheet
        var myRow = SpreadsheetApp.getActiveSpreadsheet().getRange(row + ":" + row);
        for (var i = 1; i < Sheet.getLastColumn() + 1; i++) {
            var myCell = myRow.getCell(1, i);
            copyBody.replaceText("{" + myCell.getA1Notation().replace(row, "") + "}", myCell.getValue());
        }
        myDoc.saveAndClose();
        var destFolder = DriveApp.getFolderById(currentFID);
        Logger.log(myDocID);
        var doc = DriveApp.getFileById(myDocID); // get the document again but using DriveApp this time...

        destFolder.addFile(doc);//add to filder
        var pdf = DriveApp.getFileById(myDocID).getAs("application/pdf");
        destFolder.createFile(pdf); // this will create the pdf file in your folder
        var app = UiApp.getActiveApplication();
        app.close();
        return app;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getTemplates() 
{
        var doc = SpreadsheetApp.getActiveSpreadsheet();
        var app = UiApp.createApplication().setTitle('Generate from template');
        // Create a grid with 3 text boxes and corresponding labels
        var grid = app.createGrid(5, 2);
        grid.setWidget(0, 0, app.createLabel('Template name:'));
        var list = app.createListBox();
        list.setName('Templates');
        grid.setWidget(0, 1, list);

        var folders = DriveApp.getFoldersByName("Templates");
        while (folders.hasNext()) 
        {
          var folder = folders.next();
          Logger.log(folder.getName());
          var allMyFilesByType = folder.getFilesByType(MimeType.GOOGLE_DOCS)
        };
        while (allMyFilesByType.hasNext())
        {
          var file = allMyFilesByType.next();
          list.addItem(file.getName(),file.getId());
          Logger.log(file.getName());
        };

        grid.setWidget(1, 0, app.createLabel('Row:'));
        var row = app.createTextBox().setName('row');
        row.setValue(SpreadsheetApp.getActiveSpreadsheet().getActiveRange().getRow());
        grid.setWidget(1, 1, row);
        var curFN = app.createTextBox().setText('MyDrive/').setName('curFN').setId('curFN').setWidth('400');
        var curFID = app.createTextBox().setText(DriveApp.getRootFolder().getId()).setName('curFID').setId('curFID').setVisible(false);
        var listF = app.createListBox().setName('listF').setId('listF').addItem('Please Select Folder', 'x');
        grid.setText(2, 0, 'Type Path:').setWidget(2, 1, curFN).setText(3, 0, 'OR').setText(4, 0, 'Choose Path:').setWidget(4, 1, listF).setWidget(3, 1, curFID);
        var folders = DriveApp.getRootFolder().getFolders();
        while (folders.hasNext()) {
            var folder = folders.next();
            listF.addItem(folder.getName(),folder.getId())
        };
        var handlerF = app.createServerHandler('folderSelect').addCallbackElement(grid);
        listF.addChangeHandler(handlerF);
        var panel = app.createVerticalPanel();
        panel.add(grid);
        var button = app.createButton('Submit');
        var handler = app.createServerClickHandler('generateDocument');
        handler.addCallbackElement(grid);
        button.addClickHandler(handler);
        // Add the button to the panel and the panel to the application, then display the application app in the Spreadsheet doc
        panel.add(button);
        app.add(panel);
        doc.show(app);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function folderSelect(e) 
{
        var app = UiApp.getActiveApplication();
        var currentFN = e.parameter.curFN;
        var currentFID = e.parameter.listF;
        Logger.log(currentFID);
        var listF = app.getElementById('listF');
        var curFN = app.getElementById('curFN');
        var curFID = app.getElementById('curFID');
        if (currentFID == 'x') {
            currentFID = DriveApp.getRootFolder().getId();
            curFN.setText('MyDrive/')
        };
        var startFolder = DriveApp.getFolderById(currentFID);
        var folders = startFolder.getFolders();
        listF.clear().addItem('No More Sub Folders!', 'x').addItem('Go back to Root', 'x');
        if (folders.length > 0)
        {
            listF.clear();
            listF.addItem('Select Sub Folder', 'x')
        };
        while (folders.hasNext()) 
        {
            var folder = folders.next();
            listF.addItem(folder.getName(),folder.getId())
        };
        curFN.setText(currentFN + DriveApp.getFolderById(currentFID).getName() + '/');
        if (currentFID == DriveApp.getRootFolder().getId()) {
            curFN.setText('MyDrive/')
        };
        curFID.setText(currentFID);
        return app;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onOpen() 
{
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var menuEntries = [{
        name: "Export Row to Document",
        functionName: "getTemplates"
    }];
    ss.addMenu("Generate Documents Here!", menuEntries);
}