【问题标题】:How can I use a variable as a parameter in getSheetByName?如何在 getSheetByName 中使用变量作为参数?
【发布时间】:2020-07-25 15:05:01
【问题描述】:

我有以下代码从电子表格中的数据生成一些 gslides 幻灯片。该代码附加到 gslides 文件中,当链接/年份的参数作为字符串输入时它可以工作。但是,这些参数有时会因设置列表而异(例如,从不同的工作表或不同的文件中提取),因此有时需要编辑代码。

我想与不知道如何使用应用程序脚本的同事分享此内容,因此尝试对其进行编辑,以便可以从 gslides 文件中一张幻灯片的文本框中提取链接/年份。他们顺利通过,但是当我尝试将其用作参数时,我收到第 11 行的错误(var values = sheet.getRange('F2:aa2').getValues();),因为工作表返回为 null。

我试过用引号括起来 (" ' " + year + " ' "),但这也不起作用。

如果我需要包含更多信息或指向表格/幻灯片文件的链接,请告诉我。

function generateStarters() {
                                                                               
  var deck = SlidesApp.getActivePresentation();
  var slides = deck.getSlides();
  var link = slides[2].getPageElements()[2].asShape().getText().asString()
  var year = slides[2].getPageElements()[4].asShape().getText().asString()
  var dataSpreadsheetUrl = link 
  var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
  var sheet = ss.getSheetByName(year); 
  var values = sheet.getRange('F2:aa2').getValues(); 

  var templateSlide = slides[1];
  var presLength = slides.length;
  
  values.forEach(function(page){
  if(page[0]){
    
   var Q1 = page[0];
   var A1 = page[1];
   var Q2 = page[4];
   var A2 = page[5];
   var Q3 = page[8];
   var A3 = page[9];
   var Q4 = page[12];
   var A4 = page[13];
   var QK = page[16];
   var AK = page[17]; 
   var QF = page[20];
   var AF = page[21];
    
   templateSlide.duplicate(); //duplicate the template page
   slides = deck.getSlides(); //update the slides array for indexes and length
   newSlide = slides[3]; // declare the new page to update
    
    
   var shapes = (newSlide.getShapes());
     shapes.forEach(function(shape){
       shape.getText().replaceAllText('{{q1}}',Q1);
       shape.getText().replaceAllText('{{a1}}',A1);
       shape.getText().replaceAllText('{{q2}}',Q2);
       shape.getText().replaceAllText('{{a2}}',A2);
       shape.getText().replaceAllText('{{q3}}',Q3);
       shape.getText().replaceAllText('{{a3}}',A3);
       shape.getText().replaceAllText('{{q4}}',Q4);
       shape.getText().replaceAllText('{{a4}}',A4);
       shape.getText().replaceAllText('{{qk}}',QK);
       shape.getText().replaceAllText('{{ak}}',AK);
       shape.getText().replaceAllText('{{qf}}',QF);
       shape.getText().replaceAllText('{{af}}',AF);
       
    }); 
   presLength = slides.length; 
   newSlide.move(presLength); 
  } 
  }); 
} ```

【问题讨论】:

  • 究竟是什么错误?
  • 我的猜测是那一年要么未定义,要么不是工作表的名称。或者您的工作表名称可能有前导或试用空格
  • 错误是 var values = sheet.getRange('F2:aa2').getValues();无法获取值,因为变量 sheet 返回为 null。我认为空格可能是问题,但我什至将工作表名称直接复制到幻灯片文件的文本框中,没有任何更改,当我从记录器中获取它时,它会正确显示。
  • 也许你可以使用javascript trim commands之一?
  • 是的,我选择了: var year1 = year.substring(0, year.length - 1) 因为并非所有工作表名称的长度都相同。

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


【解决方案1】:

幻灯片文件中的字符串似乎总是在末尾有一个空格(来自文本框),所以我只需要添加一行额外的代码来删除那个空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2019-05-24
    • 1970-01-01
    • 2016-08-10
    相关资源
    最近更新 更多