You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Google Apps Script将Google Sheets单元格中的SVG导出为PNG?

直接将Google Sheets单元格中的SVG代码导出为PNG的方法

当然可以实现,用Google Apps Script就能搞定——核心思路是通过HtmlService渲染SVG,再借助Canvas将其转换为PNG格式,下面是具体实现步骤和代码:

  1. 打开你的Google表格,点击顶部菜单栏的「扩展程序」>「Apps脚本」,进入脚本编辑器。
  2. 替换编辑器里的默认代码为以下脚本:
function exportSvgToPng() {
  // 获取Sheet1!A1中的SVG代码
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  const svgContent = sheet.getRange("A1").getValue();
  if (!svgContent) {
    SpreadsheetApp.getUi().alert("Sheet1!A1中没有SVG代码");
    return;
  }

  // 创建用于渲染SVG的HTML模板
  const htmlTemplate = HtmlService.createTemplate(`
    <!DOCTYPE html>
    <html>
      <body>
        <svg id="svgElement" style="display:none">${svgContent}</svg>
        <canvas id="canvasElement"></canvas>
        <script>
          // 获取SVG元素和Canvas
          const svg = document.getElementById('svgElement');
          const canvas = document.getElementById('canvasElement');
          const ctx = canvas.getContext('2d');

          // 设置Canvas尺寸匹配SVG
          const svgWidth = parseFloat(svg.getAttribute('width')) || 800;
          const svgHeight = parseFloat(svg.getAttribute('height')) || 600;
          canvas.width = svgWidth;
          canvas.height = svgHeight;

          // 将SVG转为Data URL并绘制到Canvas
          const svgData = new XMLSerializer().serializeToString(svg);
          const img = new Image();
          img.onload = function() {
            ctx.drawImage(img, 0, 0);
            // 将Canvas转为PNG Data URL
            const pngDataUrl = canvas.toDataURL('image/png');
            // 调用服务器端函数保存PNG
            google.script.run
              .withSuccessHandler(() => {
                alert('PNG已成功保存到Google Drive');
                google.script.host.close();
              })
              .savePngToDrive(pngDataUrl, '导出的SVG转PNG');
          };
          img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svgData);
        </script>
      </body>
    </html>
  `);

  // 显示HTML弹窗执行转换
  const htmlOutput = htmlTemplate.evaluate().setWidth(100).setHeight(100);
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, '正在转换SVG为PNG...');
}

// 服务器端函数:将PNG Data URL保存到Google Drive
function savePngToDrive(pngDataUrl, fileName) {
  // 去除Data URL前缀并转为Blob
  const pngBlob = Utilities.newBlob(
    Utilities.base64Decode(pngDataUrl.split(',')[1]),
    'image/png',
    `${fileName}.png`
  );
  // 保存到Google Drive根目录,可修改为指定文件夹ID
  DriveApp.createFile(pngBlob);
}

使用说明

  • 保存脚本后,回到Google表格,点击「扩展程序」>「Apps脚本」>选择exportSvgToPng运行,首次运行需要完成权限授权。
  • 运行后会弹出一个小弹窗,转换完成后会提示PNG已保存到你的Google Drive根目录。

注意事项

  • 如果SVG中引用了外部图片或字体,可能会因为跨域问题无法正常渲染,建议将外部资源转为Base64内嵌到SVG代码中。
  • 可以修改脚本中的默认尺寸(800x600)来匹配你的SVG实际大小。
  • 若想直接下载PNG而非保存到Drive,可修改客户端脚本,在successHandler中添加window.location.href = pngDataUrl实现直接下载。

内容的提问来源于stack exchange,提问作者Nathan Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:07:29