我想知道发生了什么事。我有两个函数,当一一调用时,它们都运行良好:
function createTable() {
var slidesPage = SlidesApp.openById('1QWRV4eQzGNNBz4SkR3WPurTL3O60oGYxQpBu63KrUoI').getSlides()[0];
var table = slidesPage.insertTable(7, 4);
}
function changeColumnWidth() {
var slidesPage = SlidesApp.openById('1QWRV4eQzGNNBz4SkR3WPurTL3O60oGYxQpBu63KrUoI').getSlides()[0];
var tableId = slidesPage.getTables()[0].getObjectId();
var requests = [{
updateTableColumnProperties: {
objectId: tableId,
"columnIndices": [ 1, 3],
"tableColumnProperties": {
"columnWidth": {
"magnitude": 80,
"unit": "PT"
}
},
"fields": "columnWidth"
}
}];
var createSlideResponse = Slides.Presentations.batchUpdate({
requests: requests
}, '1QWRV4eQzGNNBz4SkR3WPurTL3O60oGYxQpBu63KrUoI');
}
但尝试将这两个功能结合起来,例如:
function combined() {
createTable();
changeColumnWidth();
}
我收到错误:
无效请求[0].updateTableColumnProperties:找不到对象 (SLIDES_API456304911_0)。
想知道是否insertTable
方法是异步的,因此创建的表尚未准备好?
谢谢你的帮助。
这个修改怎么样?请将此视为几种解决方法之一。在我的解决方法中,我使用了saveAndClose()
对于你的情况。使用这个,我想将SlidesApp和Slides API的过程分开。
修改要点:
- 使用保存并关闭幻灯片
saveAndClose()
插入表格后。
- 返回要在以下位置使用的插入表的对象 ID
changeColumnWidth()
.
- At
changeColumnWidth()
,该表由 Slides API 使用接收到的对象 ID 进行修改。
修改后的脚本:
function combined() {
var tableId = createTable(); // Modified
changeColumnWidth(tableId); // Modified
}
function createTable() {
var slide = SlidesApp.openById('1QWRV4eQzGNNBz4SkR3WPurTL3O60oGYxQpBu63KrUoI'); // Modified
var slidesPage = slide.getSlides()[9]; // Modified
var table = slidesPage.insertTable(7, 4);
slide.saveAndClose(); // Added
return table.getObjectId();
}
function changeColumnWidth(tableId) { // Modified
// var slidesPage = SlidesApp.openById('1QWRV4eQzGNNBz4SkR3WPurTL3O60oGYxQpBu63KrUoI').getSlides()[0]; // This line is not used.
// var tableId = slidesPage.getTables()[0].getObjectId(); // This line is not used because slidesPage.getTables().length becomes 0.
var requests = [{
updateTableColumnProperties: {
objectId: tableId,
"columnIndices": [ 1, 3],
"tableColumnProperties": {
"columnWidth": {
"magnitude": 80,
"unit": "PT"
}
},
"fields": "columnWidth"
}
}];
var createSlideResponse = Slides.Presentations.batchUpdate({
requests: requests
}, '1QWRV4eQzGNNBz4SkR3WPurTL3O60oGYxQpBu63KrUoI');
}
Note :
- For the slide which is saved and closed by
saveAndClose()
, when the slide is reopened, the inserted table cannot be retrieved. When the table is tried to be retrieved using getTables()
again, the length becomes 0. But at Slides API, the object ID of table can be retrieved. So I thought that the issue might be able to be solved by returning the object ID of table after the table was inserted.
- 但我无法理解检索值的原因
getTables()
从重新打开的幻灯片变为“0”。对不起。
参考 :
- 保存并关闭() https://developers.google.com/apps-script/reference/slides/presentation#saveandclose
如果此解决方法不是您想要的,我很抱歉。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)