使用 Apps 脚本清除幻灯片中的文本格式
Clear text formatting in Slides using Apps Script
我有一张带有文本框和不同形状的幻灯片。我需要删除页面元素内所有文本的格式。
删除格式实际上恢复到原始文本属性基于幻灯片的主题或母版
我没有找到任何清除格式并将其恢复为基本格式的功能。
我试过了,
setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false)
但是,它不会恢复其字体大小和字体系列,因为我没有找到获取占位符默认字体大小和字体系列的方法。
是否有可用的解决方法?如何取消设置字体系列和字体大小?
更新:(不工作)
text.getTextStyle().setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false).setFontFamily("").setFontFamily("").setFontSize(null);
这会引发服务器错误
这个解决方法怎么样?我认为这种情况有两种模式。从你的问题来看,在这个答案中,它清除了 underline, italic, bold, strikethrough, fontFamily and fontSize
的格式。在此答案中,"clear" 表示它修改为默认格式。
解决方法 1:
使用幻灯片服务。首先,它检索文本样式的默认值。作为示例,将包含文本值的文本框放到幻灯片中。在这种情况下,文本值的格式没有改变。使用幻灯片API,默认文本样式检索如下。
"style": {
"underline": false,
"italic": false,
"bold": false,
"strikethrough": false,
"fontFamily": "Arial",
"fontSize": {
"magnitude": 14,
"unit": "PT"
}
}
在此解决方法中,这些值用作默认值。示例脚本如下
示例脚本:
本例将SHAPE和TABLE的PageElementType的文字样式修改为默认格式。
function toDefault(text) {
if (text.getRange(0,1).asString().charCodeAt(0) != 10) {
var style = text.getTextStyle();
return style.setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false).setFontFamily("Arial").setFontSize(14);
}
return null;
}
function myFunction() {
var s = SlidesApp.getActivePresentation();
var slide = s.getSlides()[0]; // As a sample, 1st page is used.
var pageElements = slide.getPageElements();
pageElements.forEach(function(e) {
if (e.getPageElementType() == "SHAPE") {
var text = e.asShape().getText();
toDefault(text);
} else if (e.getPageElementType() == "TABLE") {
var table = e.asTable();
for (var row = 0; row < table.getNumRows(); row++) {
for (var col = 0; col < table.getNumColumns(); col++) {
var text = table.getCell(row, col).getText();
toDefault(text);
}
}
}
});
}
解决方法 2:
使用幻灯片API。对于Slides.Presentations.batchUpdate()
的updateTextStyle
,当只使用"fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"
而不设置每个值时,使用underline,italic,bold,strikethrough,fontFamily,fontSize
的默认值。在此解决方法中,使用了它。
示例脚本:
本例将SHAPE和TABLE的PageElementType的文字样式修改为默认格式。
function myFunction() {
var s = SlidesApp.getActivePresentation();
var slide = s.getSlides()[0];
var presentationId = s.getId();
var pageElements = slide.getPageElements();
var reqs = pageElements.reduce(function(o, e) {
if (e.getPageElementType() == "SHAPE") {
if (e.asShape().getText().getRange(0,1).asString().charCodeAt(0) != 10) {
o.push({"updateTextStyle": {"objectId": e.getObjectId(), "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"}});
}
} else if (e.getPageElementType() == "TABLE") {
var table = e.asTable();
var objectId = e.getObjectId();
for (var row = 0; row < table.getNumRows(); row++) {
for (var col = 0; col < table.getNumColumns(); col++) {
var text = table.getCell(row, col).getText();
if (text.getRange(0,1).asString().charCodeAt(0) != 10) {
o.push({"updateTextStyle": {"objectId": e.getObjectId(), "cellLocation": {"columnIndex": row, "rowIndex": col}, "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"}});
}
}
}
}
return o;
}, []);
var resource = {"requests": reqs};
Slides.Presentations.batchUpdate(resource, presentationId);
}
注:
- 当您使用解决方法 2 时,请在高级 Google 服务和 API 控制台启用幻灯片 API。
- 如果要清除文本样式的所有格式,解决方法2,请将
"fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"
修改为"fields": "*"
。
参考文献:
我有一张带有文本框和不同形状的幻灯片。我需要删除页面元素内所有文本的格式。
删除格式实际上恢复到原始文本属性基于幻灯片的主题或母版
我没有找到任何清除格式并将其恢复为基本格式的功能。
我试过了,
setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false)
但是,它不会恢复其字体大小和字体系列,因为我没有找到获取占位符默认字体大小和字体系列的方法。
是否有可用的解决方法?如何取消设置字体系列和字体大小?
更新:(不工作)
text.getTextStyle().setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false).setFontFamily("").setFontFamily("").setFontSize(null);
这会引发服务器错误
这个解决方法怎么样?我认为这种情况有两种模式。从你的问题来看,在这个答案中,它清除了 underline, italic, bold, strikethrough, fontFamily and fontSize
的格式。在此答案中,"clear" 表示它修改为默认格式。
解决方法 1:
使用幻灯片服务。首先,它检索文本样式的默认值。作为示例,将包含文本值的文本框放到幻灯片中。在这种情况下,文本值的格式没有改变。使用幻灯片API,默认文本样式检索如下。
"style": {
"underline": false,
"italic": false,
"bold": false,
"strikethrough": false,
"fontFamily": "Arial",
"fontSize": {
"magnitude": 14,
"unit": "PT"
}
}
在此解决方法中,这些值用作默认值。示例脚本如下
示例脚本:
本例将SHAPE和TABLE的PageElementType的文字样式修改为默认格式。
function toDefault(text) {
if (text.getRange(0,1).asString().charCodeAt(0) != 10) {
var style = text.getTextStyle();
return style.setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false).setFontFamily("Arial").setFontSize(14);
}
return null;
}
function myFunction() {
var s = SlidesApp.getActivePresentation();
var slide = s.getSlides()[0]; // As a sample, 1st page is used.
var pageElements = slide.getPageElements();
pageElements.forEach(function(e) {
if (e.getPageElementType() == "SHAPE") {
var text = e.asShape().getText();
toDefault(text);
} else if (e.getPageElementType() == "TABLE") {
var table = e.asTable();
for (var row = 0; row < table.getNumRows(); row++) {
for (var col = 0; col < table.getNumColumns(); col++) {
var text = table.getCell(row, col).getText();
toDefault(text);
}
}
}
});
}
解决方法 2:
使用幻灯片API。对于Slides.Presentations.batchUpdate()
的updateTextStyle
,当只使用"fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"
而不设置每个值时,使用underline,italic,bold,strikethrough,fontFamily,fontSize
的默认值。在此解决方法中,使用了它。
示例脚本:
本例将SHAPE和TABLE的PageElementType的文字样式修改为默认格式。
function myFunction() {
var s = SlidesApp.getActivePresentation();
var slide = s.getSlides()[0];
var presentationId = s.getId();
var pageElements = slide.getPageElements();
var reqs = pageElements.reduce(function(o, e) {
if (e.getPageElementType() == "SHAPE") {
if (e.asShape().getText().getRange(0,1).asString().charCodeAt(0) != 10) {
o.push({"updateTextStyle": {"objectId": e.getObjectId(), "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"}});
}
} else if (e.getPageElementType() == "TABLE") {
var table = e.asTable();
var objectId = e.getObjectId();
for (var row = 0; row < table.getNumRows(); row++) {
for (var col = 0; col < table.getNumColumns(); col++) {
var text = table.getCell(row, col).getText();
if (text.getRange(0,1).asString().charCodeAt(0) != 10) {
o.push({"updateTextStyle": {"objectId": e.getObjectId(), "cellLocation": {"columnIndex": row, "rowIndex": col}, "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"}});
}
}
}
}
return o;
}, []);
var resource = {"requests": reqs};
Slides.Presentations.batchUpdate(resource, presentationId);
}
注:
- 当您使用解决方法 2 时,请在高级 Google 服务和 API 控制台启用幻灯片 API。
- 如果要清除文本样式的所有格式,解决方法2,请将
"fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"
修改为"fields": "*"
。