【发布时间】: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