【问题标题】:How to insert images according to creation date with google apps script?如何使用谷歌应用脚​​本根据创建日期插入图像?
【发布时间】:2021-11-23 23:52:09
【问题描述】:

我希望根据图像文件的创建日期将图像文件插入谷歌幻灯片。我有以下代码,依次 将图像从驱动器文件夹插入谷歌幻灯片:

function makeSlides() {
  
  var presentation = SlidesApp.openById(slideID);
  var folder = DriveApp.getFolderById(folderID);
  var contents = folder.getFiles()
  
  var file;
  var i = 1;
  
  while (contents.hasNext()) {
    
    var file = contents.next();
  
    data = file.getId(); 
    
    // insert above image
    
    var image = DriveApp.getFileById(data);
    var slide = presentation.getSlides()[i];
    var image = slide.insertImage(image);
    slide = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK);    
    i++;
 
  }

}

我想更改它,以便按照创建日期(最新或最旧)添加图像。收到的任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: javascript google-apps-script google-slides


    【解决方案1】:

    我相信你的目标如下。

    • 您想从特定文件夹中检索图像文件。
    • 您希望按照文件创建日期的顺序将检索到的图像放入 Google 幻灯片。
    • 您希望使用 Google Apps 脚本实现此目的。

    这样的话,下面的修改怎么样?

    当使用Drive API中的“Files:list”方法时,可以按照创建日期的顺序检索文件列表。这用于修改。

    修改脚本:

    在使用此脚本之前,please enable Drive API at Advanced Google services

    function makeSlides() {
      var slideID = "###"; // Please set your Google Slides ID.
      var folderID = "###"; // Please set your folder ID.
    
      var presentation = SlidesApp.openById(slideID);
      var files = Drive.Files.list({orderBy: "createdDate asc", q: `'${folderID}' in parents and trashed=false and mimeType contains 'image'`, fields: "items(id)"}).items;
      files.forEach(({id}, i) => {
        var image = DriveApp.getFileById(id);
        var slide = presentation.getSlides()[i];
        var image = slide.insertImage(image);
        slide = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK);
      });
    }
    
    • 运行此脚本时,会按照文件创建日期的顺序从特定文件夹中检索文件列表。在这种情况下,使用orderBy: "createdDate asc"。这意味着第一张图像是最旧的图像。当您想使用第一张图片为最新的顺序时,请修改为orderBy: "createdDate desc"

    参考资料:

    【讨论】:

    • @sp2 感谢您的回复和测试。我很高兴你的问题得到了解决。也谢谢你。
    • @sp2 关于您的附加问题,在这种情况下,请将var files = Drive.Files.list({orderBy: "createdDate asc", q: `'${folderID}' in parents and trashed=false and mimeType contains 'image'`, fields: "items(id)"}).items; 修改为var files = Drive.Files.list({orderBy: "createdDate asc", q: `'${folderID}' in parents and trashed=false and mimeType contains 'image'`, fields: "items(id)", corpora: "allDrives", includeItemsFromAllDrives: true, supportsAllDrives: true}).items;。这样就可以检索到共享云端硬盘中的文件了。
    • @sp2 感谢您的回复。我很高兴你的第二个问题得到了解决。关于你的第三个新问题,我想支持你。但我必须为我糟糕的英语水平道歉。不幸的是,我无法理解它。我深表歉意,我无法解决您的所有问题。这是因为我的英语水平不好。我再次为此深表歉意。我可以问你第三个问题的细节吗?
    • @sp2 感谢您的回复。我再次为我糟糕的英语水平道歉。虽然我不确定我是否能正确理解您的第二个问题,例如,在我的回答中,当按createdDate 的顺序检索文件列表时,我使用createdDate asc 作为值。在这种情况下,当您想按文件名对文件列表进行排序时,使用orderBy: "title asc" 怎么样?如果这不是您第二个问题的直接解决方案,我再次道歉。
    • @sp2 感谢您的回复。很高兴您的其他问题也得到了解决。关于字段“标题”的文档,可以在this official document查看。
    【解决方案2】:

    如果您希望它们按特定顺序排列,请在添加之前 sort 它们。

    【讨论】:

    • 感谢分享该链接
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2016-07-23
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多