如何通过Google Apps Script在Google Sheet中旋转指定角度的图片?
Google Sheets图片旋转45度的GAS实现方案
SpreadsheetApp提供的OverGridImage对象(即getImages()返回的图片实例)确实没有原生的旋转方法,你尝试的rotate()和setRotate()不存在是正常的。以下是两种可行的实现方案:
方案一:调用Google Sheets API实现旋转
该方案需要先启用Sheets API,直接通过API修改图片的旋转属性:
在脚本编辑器中启用Sheets API:
- 点击菜单栏「资源」→「高级Google服务」
- 找到「Google Sheets API」并开启
完整代码示例:
const ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/id..."); const sheet = ss.getSheetByName('Sheet 1'); const images = sheet.getImages(); const lastImage = images[images.length - 1]; // 调整尺寸 lastImage.setWidth(100); lastImage.setHeight(100); // 获取图片的关键ID const sheetId = sheet.getSheetId(); const objectId = lastImage.getObjectId(); // 调用Sheets API设置旋转角度 Sheets.Spreadsheets.batchUpdate({ requests: [ { updateImageProperties: { objectId: objectId, fields: "rotation", imageProperties: { rotation: 45 // 旋转角度,单位为度 } } } ] }, ss.getId());
方案二:本地处理图片后重新插入
如果不想启用API,可以先下载图片,用App Script的图片服务旋转后替换原图片:
const ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/id..."); const sheet = ss.getSheetByName('Sheet 1'); const images = sheet.getImages(); const lastImage = images[images.length - 1]; // 记录原图片的位置和尺寸 const anchorRow = lastImage.getAnchorRow(); const anchorColumn = lastImage.getAnchorColumn(); const width = 100; const height = 100; // 获取图片URL并下载 const imageUrl = lastImage.getUrl(); const response = UrlFetchApp.fetch(imageUrl); const blob = response.getBlob(); // 旋转图片(使用App Script的Image服务) const image = ImageApp.open(blob); const rotatedBlob = image.rotate(45).getBlob(); // 删除原图片,插入旋转后的新图片 lastImage.remove(); sheet.insertImage(rotatedBlob, anchorColumn, anchorRow) .setWidth(width) .setHeight(height);
注意事项
- 方案一中,首次运行脚本会触发授权请求,需要允许相关权限。
- 方案二中,如果图片是私有或需要权限访问的外部链接,可能需要添加OAuth授权头处理,否则会下载失败。
内容的提问来源于stack exchange,提问作者FredyH
相关产品推荐
相关产品推荐

