Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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 如何使用Google应用程序脚本将值从工作表复制到幻灯片_Google Apps Script_Google Sheets_Google Slides - Fatal编程技术网

Google apps script 如何使用Google应用程序脚本将值从工作表复制到幻灯片

Google apps script 如何使用Google应用程序脚本将值从工作表复制到幻灯片,google-apps-script,google-sheets,google-slides,Google Apps Script,Google Sheets,Google Slides,我正在制作一张幻灯片,该幻灯片将从Google sheet中获取动态数据 我想保留幻灯片模板 实时更新幻灯片值 我想使用Google应用程序脚本将工作表中的数据连接到幻灯片。我对Java脚本还不熟悉,并遵循了一个很好的方法来实现这一点,但运气不好 我的2个文件设置如下 和 下面是我实现的代码,但问题是它不起作用,试图创建多个页面并在每个页面上重复相同的值。我只想要一页,上面有从工作表中更新的值 你的帮助将不胜感激。多谢各位 函数generateLandingPagesReport(){ v

我正在制作一张幻灯片,该幻灯片将从Google sheet中获取动态数据

  • 我想保留幻灯片模板
  • 实时更新幻灯片值
  • 我想使用Google应用程序脚本将工作表中的数据连接到幻灯片。我对Java脚本还不熟悉,并遵循了一个很好的方法来实现这一点,但运气不好

    我的2个文件设置如下

    下面是我实现的代码,但问题是它不起作用,试图创建多个页面并在每个页面上重复相同的值。我只想要一页,上面有从工作表中更新的值 你的帮助将不胜感激。多谢各位

    函数generateLandingPagesReport(){
    var数据预处理表=”https://docs.google.com/spreadsheets/d/1UccsFtqKKsXhlus4-02dXfJP0ECcCsBUmLNZajJnS_4/edit“;//确保这包括结尾的“/编辑”
    var ss=SpreadsheetApp.openByUrl(dataspreadsheetur);
    var deck=SlidesApp.getActivePresentation();
    var sheet=ss.getSheetByName('metrics');//工作表名称
    var values=sheet.getRange('C4:L12').getValues();//值的范围
    var slides=deck.getSlides();
    var templateSlide=幻灯片[0];
    var presLength=slides.length;
    values.forEach(函数)(第页){
    如果(第[0]页){
    var电流=第[2]页;
    var目标=第[3]页;
    变量Emea=第[5]页;
    var Depac=第[7]页;
    var Emma=第[9]页;
    var注释=第[11]页;
    templateSlide.duplicate();//复制模板页
    slides=deck.getSlides();//更新幻灯片数组的索引和长度
    newSlide=slides[2];//声明要更新的新页面
    var shapes=(newSlide.getShapes());
    形状。forEach(函数(形状){
    shape.getText().replaceAllText('{Current}}',Current);
    shape.getText().replaceAllText('{Target}}',Target);
    shape.getText().replaceAllText('{Emea}}',Emea);
    shape.getText().replaceAllText('{Depac}}',Depac)
    shape.getText().replaceAllText('{Emma}}',Emma);
    shape.getText().replaceAllText('{Comment}}',Comment);
    });
    presLength=幻灯片长度;
    newSlide.move(presLength);
    }//结束我们的条件语句
    });//关闭我们的价值循环
    //卸下模板幻灯片
    templateSlide.remove();
    
    }
    我相信你的目标如下

    function generateLandingPagesReport() {
      var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1UccsFtqKKsXhlus4-02dXfJP0ECcCsBUmLNZajJnS_4/edit";
      var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
      var deck = SlidesApp.getActivePresentation();
      
      // 1. Retrieve values from Google Spreadsheet.
      var sheet = ss.getSheetByName('metrics');
      var values = sheet.getRange('A4:L12').getDisplayValues(); // or .getValues();
      
      // 2. Create an object for using replacing the values.
      var obj = values.reduce((o, [a,,c,d,,f,,h,,j,,l]) => Object.assign(o, {[a.trim()]: {"{{current}}": c, "{{Target}}": d, "{{Emea}}": f, "{{Depac}}": h, "{{Emma}}": j, "{{Comment}}": l}}), {});
    
      // 3. Replace values for each group.
      var slides = deck.getSlides();
      var templateSlide = slides[0];
      var groups = templateSlide.getGroups();
      groups.forEach(g => {
        var c = g.getChildren();
        var key = "";
        var r = new RegExp(/{{\w.+}}/);
        for (var i = 0; i < c.length; i++) {
          var t = c[i].asShape().getText().asString().trim();
          if (!r.test(t)) {
            key = t;
            break;
          }
        }
    
        // I modified below script as the additional modification.
        if (obj[key]) {
          c.forEach(h => {
            var t = h.asShape().getText().asString().trim();
            if (r.test(t)) h.asShape().getText().setText(obj[key][t]);
          });
        }
      });
    }
    
    • 您希望将表格从Google电子表格转换为Google幻灯片

      • 作为示例情况,您希望实现以下目标。这是你的问题

    • 当我看到您的示例情况时,我可以确认Google幻灯片中有两个值
      Samuel Tuffuor
      。在这种情况下,您希望使用
      METRIC
      的行标题将值放入Google幻灯片

    修改点:
    • 在您当前的脚本中,
      • duplicate()
        在循环中使用。这样,每次循环都会插入新幻灯片。我认为这是你的问题的几个原因之一
      • values.forEach()
        的第一个循环中,所有值都被替换。因为在谷歌幻灯片的模板中,
        {{current}
        {{Target}},
        {{Emea}}
        {Depac}
        {Emma}
        {Comment}
        每一行的
        replaceAllText>都被替换掉
      • 在这种情况下,需要区分每行的
        {{current}
        {{Target}}、
        {{Emea}}
        {Depac}}
        {Emma}
        {Comment}}
    为了区分谷歌幻灯片模板的每一行的值,我建议对每一行进行分组

    用法: 1.对谷歌幻灯片的每一行模板进行分组。 请将谷歌幻灯片的每一行模板分组如下。红色虚线表示组。在您的示例谷歌幻灯片中,创建了9个组。使用这些组,从Google电子表格检索的值将替换为每个组的占位符

    2.示例脚本。 为了用每行谷歌幻灯片的占位符替换从谷歌电子表格检索到的值,我修改了您的脚本如下

    function generateLandingPagesReport() {
      var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1UccsFtqKKsXhlus4-02dXfJP0ECcCsBUmLNZajJnS_4/edit";
      var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
      var deck = SlidesApp.getActivePresentation();
      
      // 1. Retrieve values from Google Spreadsheet.
      var sheet = ss.getSheetByName('metrics');
      var values = sheet.getRange('A4:L12').getDisplayValues(); // or .getValues();
      
      // 2. Create an object for using replacing the values.
      var obj = values.reduce((o, [a,,c,d,,f,,h,,j,,l]) => Object.assign(o, {[a.trim()]: {"{{current}}": c, "{{Target}}": d, "{{Emea}}": f, "{{Depac}}": h, "{{Emma}}": j, "{{Comment}}": l}}), {});
    
      // 3. Replace values for each group.
      var slides = deck.getSlides();
      var templateSlide = slides[0];
      var groups = templateSlide.getGroups();
      groups.forEach(g => {
        var c = g.getChildren();
        var key = "";
        var r = new RegExp(/{{\w.+}}/);
        for (var i = 0; i < c.length; i++) {
          var t = c[i].asShape().getText().asString().trim();
          if (!r.test(t)) {
            key = t;
            break;
          }
        }
    
        // I modified below script as the additional modification.
        if (obj[key]) {
          c.forEach(h => {
            var t = h.asShape().getText().asString().trim();
            if (r.test(t)) h.asShape().getText().setText(obj[key][t]);
          });
        }
      });
    }
    
    函数generateLandingPagesReport(){
    var数据预处理表=”https://docs.google.com/spreadsheets/d/1UccsFtqKKsXhlus4-02dXfJP0ECcCsBUmLNZajJnS_4/edit";
    var ss=SpreadsheetApp.openByUrl(dataspreadsheetur);
    var deck=SlidesApp.getActivePresentation();
    //1.从谷歌电子表格中检索值。
    var sheet=ss.getSheetByName('metrics');
    var values=sheet.getRange('A4:L12').getDisplayValues();//或.getValues();
    //2.创建用于替换值的对象。
    var obj=values.reduce((o,[a,c,d,f,h,j,l])=>Object.assign(o,{[a.trim()]:{{{{current}}:c,{{Target}:d,{Emea}:f,{Depac}:h,{Emma}:j,{{Comment}:l},{});
    //3.替换每组的值。
    var slides=deck.getSlides();
    var templateSlide=幻灯片[0];
    var groups=templateSlide.getGroups();
    groups.forEach(g=>{
    var c=g.getChildren();
    var key=“”;
    var r=newregexp(/{\w.+}}/);
    对于(变量i=0;i{
    var t=h.asShape().getText().asString().trim();
    if(r.test(t))h.asShape().getText().setText(obj[key][t]);
    });
    }
    });
    }
    
    此修改脚本的流程如下所示

    function generateLandingPagesReport() {
      var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1UccsFtqKKsXhlus4-02dXfJP0ECcCsBUmLNZajJnS_4/edit";
      var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
      var deck = SlidesApp.getActivePresentation();
      
      // 1. Retrieve values from Google Spreadsheet.
      var sheet = ss.getSheetByName('metrics');
      var values = sheet.getRange('A4:L12').getDisplayValues(); // or .getValues();
      
      // 2. Create an object for using replacing the values.
      var obj = values.reduce((o, [a,,c,d,,f,,h,,j,,l]) => Object.assign(o, {[a.trim()]: {"{{current}}": c, "{{Target}}": d, "{{Emea}}": f, "{{Depac}}": h, "{{Emma}}": j, "{{Comment}}": l}}), {});
    
      // 3. Replace values for each group.
      var slides = deck.getSlides();
      var templateSlide = slides[0];
      var groups = templateSlide.getGroups();
      groups.forEach(g => {
        var c = g.getChildren();
        var key = "";
        var r = new RegExp(/{{\w.+}}/);
        for (var i = 0; i < c.length; i++) {
          var t = c[i].asShape().getText().asString().trim();
          if (!r.test(t)) {
            key = t;
            break;
          }
        }
    
        // I modified below script as the additional modification.
        if (obj[key]) {
          c.forEach(h => {
            var t = h.asShape().getText().asString().trim();
            if (r.test(t)) h.asShape().getText().setText(obj[key][t]);
          });
        }
      });
    }
    
  • 从谷歌电子表格中检索值
  • 创建用于替换值的对象
  • 替换每个组的值
  • 3.后果 当修改后的脚本用于示例Google电子表格和示例Google幻灯片并对每行进行分组时,将显示以下结果: