Google apps script 如何以编程方式控制指南(第三规则)?
有没有办法控制谷歌幻灯片演示中的指南(第三规则)。就我所阅读的谷歌应用程序脚本文档而言,没有任何方法可以控制指南 我已经尝试过类似于指南的行(第三条规则),但这些不是“真正的”指南。用户可以删除这些行,这些行仅限于幻灯片页面区域 查看图片以了解直线和导轨之间的差异(第三条规则): 要启用指南(第三条规则),请转到此处: 幻灯片指南当前无法通过编程方式进行管理。 指南是幻灯片()中最近添加的内容,它们还没有在上实现,更不用说在应用程序脚本上了。目前,管理幻灯片的唯一方法是通过幻灯片编辑器手动操作 提交功能请求: 我建议您就在Slides API上实现此功能向提交功能请求。我对这个组件做了一些研究,似乎还没有人要求这样做 完成后,您可以通过从应用程序脚本管理此操作,至少在实现应用程序脚本内置类和方法之前是这样 允许通过Google apps script 如何以编程方式控制指南(第三规则)?,google-apps-script,google-slides-api,google-slides,Google Apps Script,Google Slides Api,Google Slides,有没有办法控制谷歌幻灯片演示中的指南(第三规则)。就我所阅读的谷歌应用程序脚本文档而言,没有任何方法可以控制指南 我已经尝试过类似于指南的行(第三条规则),但这些不是“真正的”指南。用户可以删除这些行,这些行仅限于幻灯片页面区域 查看图片以了解直线和导轨之间的差异(第三条规则): 要启用指南(第三条规则),请转到此处: 幻灯片指南当前无法通过编程方式进行管理。 指南是幻灯片()中最近添加的内容,它们还没有在上实现,更不用说在应用程序脚本上了。目前,管理幻灯片的唯一方法是通过幻灯片编辑器手动操作
SlidesApp
或slidesapi控制指南的功能请求已提交给。如果您发现该功能有用,请使用星号
简短回答
如前所述,不幸的是,目前无法通过服务或
解决方法
通过传递一个负整数作为的参数,实际上可以使线延伸到滑动边界之外。至于能够删除线,如果用户将参考线拖出幻灯片边界,也可以“删除”参考线
我无法模仿的指南的唯一属性是在呈现时隐藏它们(因为真正的指南是隐藏的)
下面是一个类似于您的方法(创建网格)的解决方案:
指南
/**
* @summary emulates adding guides to the Slide
*
* @param {{
* rows : (number|1),
* deleteOld : (boolean|true),
* cols : (number|1),
* color : string
* }}
*/
const showGuides = ({ deleteOld = true, rows = 1, cols = 1, color = "#d3d3d3" } = {}) => {
const presentation = SlidesApp.getActivePresentation();
const currPage = presentation.getSelection().getCurrentPage();
const prop = "guides";
const store = PropertiesService.getUserProperties();
/** @type {string[]} */
let guideRefs = JSON.parse(store.getProperty(prop) || "[]");
const lines = currPage.getLines();
const oldLines = lines.filter((line) => guideRefs.includes(line.getObjectId()));
if (deleteOld) {
oldLines.forEach(line => line.remove());
guideRefs = removeElements(guideRefs, oldLines.map(l => l.getObjectId()));
}
const currWidth = presentation.getPageWidth();
const currHeight = presentation.getPageHeight();
const xStep = Math.floor(currWidth / cols);
const yStep = Math.floor(currHeight / rows);
const newGuides = [];
const maxScreen = 4096;
for (let x = 0; x <= cols; x++) {
const line = currPage.insertLine(
SlidesApp.LineCategory.STRAIGHT,
xStep * x, -maxScreen, xStep * x, currHeight + maxScreen
);
const fill = line.getLineFill();
fill.setSolidFill(color);
const oid = line.getObjectId();
guideRefs.push(oid);
newGuides.push(line);
}
for (let y = 0; y <= rows; y++) {
const line = currPage.insertLine(
SlidesApp.LineCategory.STRAIGHT,
-maxScreen, yStep * y, currWidth + maxScreen, yStep * y
);
const fill = line.getLineFill();
fill.setSolidFill(color);
const oid = line.getObjectId();
guideRefs.push(oid);
newGuides.push(line);
}
store.setProperty(prop, JSON.stringify(guideRefs));
};
/**
* @summary removes elements from an array
* @param {any[]} arr
* @param {...any} elems
* @returns {any[]}
*/
const removeElements = (arr, ...elems) => arr.filter((elem) => !elems.includes(elem));
演示
很有趣。这似乎是一个完美的解决方案。如何计算屏幕大小。如果它是一个小屏幕,你会建议使用javascript获取屏幕吗?@puzzedboy-你真的有一个好主意-是的!窗口大小可以用来确定负偏移量,我没有想到,只是使用了一个任意大的值(不管这些行有多长,它们应该在所有屏幕大小上正确显示)