1

我有一个数组,正在尝试使用其中的信息来创建 Google 幻灯片演示文稿。我希望得到一些帮助,如果可能的话,还可以向我指出一些我可以阅读的材料,以更好地理解这些问题的可能解决方案。

数组如下:

var myArray = [[Project1,Status1,Info1],[Project2,Status2,Info2],...,[ProjectN,StatusN,InfoN]]

数组中的每个元素都指向一个不同的项目并包含:

  • 项目名称,
  • 项目的状态,
  • 关于项目的一些随机信息。

它们都是字符串。数组中元素的数量可能会有所不同,但它们将始终遵循此结构。

在演示文稿中,我在主布局中创建了一个新布局,我将其命名为“NEW LAYOUT”。该布局有 4 个组,每组有 3 个占位符。每组占位符应该填充不同项目的信息,这意味着一组占位符将填充myArray[i][1],myArray[i][2]myArray[i][3]

到目前为止,我的代码如下:

function CreatingSlides() {

var displayName = "NEW LAYOUT"; // Name of the layout that I created
var presentationId = SlidesApp.openById(PageId).getId(); //It is an existing presentation, so I just get its ID
var layouts = Slides.Presentations.get(presentationId).layouts;
var layout = {};

//The following is the array of elements. In this example,
//I only used 4 projects, but it may vary and may not be
//a multiple of 4.
var myArray = [["Project1","Status1","Info1"],["Project2","Status2","Info2"],["Project3","Status3","Info3"],["Project4","Status4","Info4"]];


//This loop searches for the layout that I created
for (i in layouts) {
  layout[layouts[i].layoutProperties.displayName] = layouts[i].objectId;
  }

//In the slide created, this loop will fill the information in it using the myArray
for (i in myArray) {
  var resource = {"requests": [{"createSlide": {"slideLayoutReference": {"layoutId": layout[displayName]},
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "SUBTITLE","index": 0},"objectId":myArray[i][1],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "BODY","index": 0},"objectId":myArray[i][2],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "BODY","index": 1},"objectId":myArray[i][3],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "SUBTITLE","index": 1},"objectId":myArray[i+1][1],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "BODY","index": 2},"objectId":myArray[i+1][2],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "BODY","index": 3},"objectId":myArray[i+1][3],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "SUBTITLE","index": 2},"objectId":myArray[i+2][1],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "BODY","index": 4},"objectId":myArray[i+2][2],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "BODY","index": 5},"objectId":myArray[i+2][3],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "SUBTITLE","index": 3},"objectId":myArray[i+3][1],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "BODY","index": 6},"objectId":myArray[i+3][2],},],
                                                "placeholderIdMappings": [{"layoutPlaceholder": {"type": "BODY","index": 7},"objectId":myArray[i+3][3],},],
                                                }
                                },
                 {"insertText": {"objectId": myArray[i][1],"text": myArray[i][1],},
                  "insertText": {"objectId": myArray[i][2],"text": myArray[i][2],},
                  "insertText": {"objectId": myArray[i][3],"text": myArray[i][3],},
                  "insertText": {"objectId": myArray[i+1][1],"text": myArray[i+1][1],},
                  "insertText": {"objectId": myArray[i+1][2],"text": myArray[i+1][2],},
                  "insertText": {"objectId": myArray[i+1][3],"text": myArray[i+1][3],},
                  "insertText": {"objectId": myArray[i+2][1],"text": myArray[i+2][1],},
                  "insertText": {"objectId": myArray[i+2][2],"text": myArray[i+2][2],},
                  "insertText": {"objectId": myArray[i+2][3],"text": myArray[i+2][3],},
                  "insertText": {"objectId": myArray[i+3][1],"text": myArray[i+3][1],},
                  "insertText": {"objectId": myArray[i+3][2],"text": myArray[i+3][2],},
                  "insertText": {"objectId": myArray[i+3][3],"text": myArray[i+3][3],}},
                               ]};

Slides.Presentations.batchUpdate(resource, presentationId);   

}

}

问题1:当数组中的元素数量可能变化时,如何做到这一点?

在这段代码中,我只使用了 myArray 中的 4 个元素,因此创建的幻灯片中的所有占位符都将被填充。但是,我不明白如果元素的数量大于 4,我怎么能告诉它创建一个新幻灯片。此外,元素的数量可能不是 4 的倍数(可能是 5,可能是 60,可能72岁……)。

问题2:我不知道如何正确使用请求中的objectIds

这部分是从我在 Google Apps 脚本参考中看到的另一个代码中得到的。在其中,我了解到,在请求中,如果首先为 objectId 设置名称,然后使用该名称在该占位符中写入内容。但是,这会产生一些问题:objectId 有时不接受我试图给它的名称,或者 objectId 说它不能使用我建议的名称,因为它应该是唯一的。有一个更好的方法吗?

问题 3:是否可以不必写 12 行来填充占位符?

我认为这只是因为我不知道如何正确使用 objectIds(问题 2)。因此,我必须单独命名幻灯片中的每个 objectId。我相信有一些方法可以使用循环来做到这一点,但到目前为止我还没有找到解决方案或理解它。

4

1 回答 1

2

首先是一个建议:您正在使用高级 Google 幻灯片服务和内置幻灯片服务 (SlidesApp)的组合。如果您只使用 SlidesApp,它会简单得多,因为它应该可以满足您的需要,而且您无需担心让 objectIds 正确。

回答您的问题:

问题1:当数组中的元素数量可能变化时,如何做到这一点?

这里的问题是您的布局中只有 12 个占位符。尝试填充超过该数量的内容是行不通的,因为您将用完占位符来填充。您的选择是:不要使用占位符,而是创建和定位文本框,或者以不同的方式呈现您的数据。例如,每个项目使用 1 张幻灯片和 3 个占位符,一个用于项目名称、状态和信息。

我建议您手动创建一个示例幻灯片来设计您希望最终幻灯片的外观,然后向后工作以编写代码来生成它。通常在带有可变字符串的幻灯片上执行 ReplaceAllText{{project_1}}: {{status_1}}会非常有效。

问题2:我不知道如何正确使用请求中的objectIds

您尝试为占位符提供一个对象 ID,然后使用 InsertText 设置内容是正确的。我认为您的问题是 placeholderIdMappings 不正确,您想要一个映射对象列表,而不是多次指定 placeholderIdMappings 键(请参阅此示例)。

{
  "createSlide": {
    "objectId": pageId,
    "slideLayoutReference": {
      "layoutId": "layoutId"
    },
    "placeholderIdMappings": [
      {
        "layoutPlaceholder": {
          "type": "SUBTITLE",
          "index": 0
        },
        "objectId": "project1Id",
       },
      {
        "layoutPlaceholder": {
          "type": "BODY",
          "index": 0
        },
        "objectId": "project1Id",
       },
    ],
  }
}

问题 3:是否可以不必写 12 行来填充占位符?

我认为这主要是由于您构建项目数据的方式、幻灯片的布局以及 placeholderIdMappings 问题。修复这些应该会使这更容易处理。

使用 SlidesApp 也应该更容易处理(使用Slide#getPlaceholder

于 2017-11-22T18:48:24.543 回答