gpt4 book ai didi

google-apps-script - 在 Google 云端硬盘中更新图片时更新 Google 幻灯片中的图片

转载 作者:行者123 更新时间:2023-12-02 04:31:02 26 4
gpt4 key购买 nike

我的目标是根据文件夹中的图像自动创建和更新 Google 幻灯片演示文稿:

当前工作正常但我想自动化的工作流程如下:

  • 图像位于 Google 云端硬盘文件夹中
  • 我使用文件选择器菜单(插入 --> 图像 --> 驱动器)手动将图像添加到每张幻灯片
  • 文件夹中的图像由外部脚本定期更新,使用相同的文件名替换以前的图像。图像保持相同的 Google 云端硬盘文件 ID
  • 幻灯片中的图像会自动更新,在浏览器中重新加载幻灯片演示文稿时可以看到更改

  • 我试图实现的目标:

    不要使用文件选取器一张一张地创建幻灯片和插入图像,而是使用基于驱动器文件夹中的图像文件创建演示文稿的脚本。

    我用过 Tutorial on the Google Developers Pages并且幻灯片的创建工作正常。然而,与手动插入相比,脚本创建的幻灯片中的图像不会更新。该脚本仅获取图像一次,并且似乎使用“图像副本”。

    我的测试代码是:
    var NAME = "Dynamic Image Insert Test";
    var presentation = SlidesApp.create(NAME);

    function addImageSlide(fileID, index) {
    var slide = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK);
    var imageurl = DriveApp.getFileById(fileID);
    var image = slide.insertImage(imageurl);
    var imgWidth = image.getWidth();
    var imgHeight = image.getHeight();
    var pageWidth = presentation.getPageWidth();
    var pageHeight = presentation.getPageHeight();
    var newX = pageWidth/2. - imgWidth/2.;
    var newY = pageHeight/2. - imgHeight/2.;
    image.setLeft(newX).setTop(newY);
    }

    function main() {
    var images = [
    "Insert ID of a File 1 on Google Drive here",
    "Insert ID of a File 2 on Google Drive here"
    ];
    var [title, subtitle] = presentation.getSlides()[0].getPageElements();
    title.asShape().getText().setText(NAME);
    subtitle.asShape().getText().setText("Insert Files from Drive using File ID");
    images.forEach(addImageSlide);
    }

    此外,在检查幻灯片页面的对象属性时,似乎有 2 个参数: contentUrl 和 sourceUrl :

    使用文件选择器插入时,图像似乎使用 来源网址 ,它保持不变,这样当文件在 Drive 上更新时更新图像。当使用 AppScript(或使用 API - 也测试过)时,图像似乎使用 contentUrl,它在每次创建图像时生成,因此不引用驱动器上的文件,因此不会反射(reflect)对文件的任何更改驱动器。

    页面对象属性的记录器输出:
    {
    "pageElements": [
    {
    "transform": {
    "scaleX": 171.123,
    "scaleY": 171.123,
    "unit": "EMU",
    "translateY": 1288327.54,
    "translateX": 2375975
    },
    "objectId": "MyImage_01",
    "image": {
    "sourceUrl": "https://lh3.google.com/u/0/d/This-is-the-static-file-id",
    "contentUrl": "https://lh6.googleusercontent.com/This-is-the-id-created-when-creating-the-image-on-the-slide",
    "imageProperties": {
    "shadow": {
    "color": {
    "rgbColor": {}
    },
    "blurRadius": {
    "unit": "EMU"
    },
    "type": "OUTER",
    "transform": {
    "scaleX": 1,
    "scaleY": 1,
    "unit": "EMU"
    },
    "alpha": 1,
    "propertyState": "NOT_RENDERED",
    "rotateWithShape": false,
    "alignment": "BOTTOM_LEFT"
    },
    "outline": {
    "dashStyle": "SOLID",
    "propertyState": "NOT_RENDERED",
    "weight": {
    "unit": "EMU",
    "magnitude": 9525
    },
    "outlineFill": {
    "solidFill": {
    "color": {
    "themeColor": "DARK2"
    },
    "alpha": 1
    }
    }
    }
    }
    },
    "size": {
    "width": {
    "unit": "EMU",
    "magnitude": 23375
    },
    "height": {
    "unit": "EMU",
    "magnitude": 15000
    }
    }
    }
    ]
    }

    reference of the API 中也没有记录 sourceUrl .

    任何想法如何使用 来源网址 插入幻灯片时而不是 contentUrl?如何使用 Google 应用程序脚本复制与文件选取器相同的插入语句和文件引用?

    最佳答案

    我已使用此脚本更新一张幻灯片上的所有图像。我目前正在考虑在用户通过 Google 表单加载图像时自动执行此功能。也许这可以帮助您解决问题。

    /////////////////////////////////////////

    var deck = SlidesApp.getActivePresentation()
    var slide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK)
    function main() {
    var folder = DriveApp.getFolderById('your folder id goes here'); // Change the folder
    ID here
    var files = folder.getFiles();
    while (files.hasNext()) {
    var file = files.next();
    Logger.log(file.getName());
    var imageUrl = DriveApp.getFileById(file.getId()).getDownloadUrl() + "&access_token="
    + ScriptApp.getOAuthToken();
    Logger.log(DriveApp.getFileById(file.getId()).getDownloadUrl() + "&access_token=" +
    ScriptApp.getOAuthToken());
    var image = slide.insertImage(imageUrl);
    }}
    ////////////////////////////////////

    问候
    卢克

    关于google-apps-script - 在 Google 云端硬盘中更新图片时更新 Google 幻灯片中的图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48851334/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com