求助:修改代码以适配Google Slides与Google Sheets
适配Google Docs/Sheets/Slides的自定义字体设置脚本
你原来的代码仅适配Google Docs,要同时支持三个服务,核心是判断当前运行环境,再调用对应服务的API处理选区和字体设置。下面是完整适配代码:
function onOpen(e) { // 根据当前环境获取UI对象 let ui; if (DocumentApp.getActiveDocument()) { ui = DocumentApp.getUi(); } else if (SpreadsheetApp.getActiveSpreadsheet()) { ui = SpreadsheetApp.getUi(); } else if (SlidesApp.getActivePresentation()) { ui = SlidesApp.getUi(); } else { return; // 不在支持的环境中直接退出 } // 创建统一的自定义菜单 ui.createMenu('XYV Font') .addItem('Load XYV Font', 'cm_Font') .addToUi(); } function cm_Font() { const targetFont = "Noto Serif"; // 处理Google Docs try { const doc = DocumentApp.getActiveDocument(); const selection = doc.getSelection(); if (selection) { const rangeElements = selection.getRangeElements(); rangeElements.forEach(element => { if (element.getElement().editAsText) { const textElement = element.getElement().editAsText(); textElement.setFontFamily( element.getStartOffset(), element.getEndOffsetInclusive(), targetFont ); } }); return; } } catch (e) {} // 处理Google Sheets try { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const range = sheet.getActiveRange(); if (range) { range.setFontFamily(targetFont); return; } } catch (e) {} // 处理Google Slides try { const slide = SlidesApp.getActivePresentation(); const selection = slide.getSelection(); const pageElements = selection.getPageElementRange().getPageElements(); pageElements.forEach(element => { // 处理文本框、形状中的文本 if (element.asShape) { const shape = element.asShape(); if (shape.getText()) { shape.getText().setFontFamily(targetFont); } } // 处理表格单元格文本 if (element.asTable) { const table = element.asTable(); for (let row = 0; row < table.getNumRows(); row++) { for (let col = 0; col < table.getNumColumns(); col++) { table.getCell(row, col).getText().setFontFamily(targetFont); } } } }); return; } catch (e) {} // 无匹配环境或无选区时提示用户 const ui = SpreadsheetApp.getUi() || DocumentApp.getUi() || SlidesApp.getUi(); ui.alert('请先选中内容,或确认当前在支持的Google文档环境中'); }
核心差异说明
- Google Docs:保留原有逻辑核心,通过
editAsText()获取文本元素,指定选区范围设置字体 - Google Sheets:选中对象是单元格范围,直接调用
Range.setFontFamily()即可批量设置 - Google Slides:需区分选中元素类型(形状、表格等),分别获取文本对象后设置字体,代码中覆盖了常见文本容器,可按需扩展其他元素类型
注意事项
- 确保目标字体(如示例中的
Noto Serif)是对应服务可识别的字体(即使未在默认列表中) - 脚本需绑定到对应的Docs/Sheets/Slides文件中运行,每个文件需单独绑定并授权
内容的提问来源于stack exchange,提问作者Greek
相关产品推荐
相关产品推荐

