Google apps script 如何使用Google应用程序脚本将值从工作表复制到幻灯片
我正在制作一张幻灯片,该幻灯片将从Google sheet中获取动态数据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
函数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
的行标题将值放入Google幻灯片METRIC
- 在您当前的脚本中,
在循环中使用。这样,每次循环都会插入新幻灯片。我认为这是你的问题的几个原因之一duplicate()
- 在
的第一个循环中,所有值都被替换。因为在谷歌幻灯片的模板中,values.forEach()
,{{current}
{{Emea}}{{Target}},
{Depac},
{Emma},
{Comment}和
replaceAllText>都被替换掉每一行的
- 在这种情况下,需要区分每行的
、{{current}
{{Emea}}{{Target}}、
{Depac}}、
{Emma}、
{Comment}}和
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]);
});
}
});
}