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

如何通过Apps Script获取Google Sheets中图片点击的XY坐标?

获取Google Sheets中图片点击的XY坐标(Apps Script实现)

嘿,我完全懂你现在的困惑——Google Sheets的Apps Script事件系统和普通浏览器端JS差得挺多的,你之前用的e.clientX/e.clientY在Sheet的图片点击事件里根本不存在,这也是Google官方文档没讲明白的坑之一。

为什么你的原代码不行?

你写的这个函数:

function test(e) {
  Browser.msgBox('You clicked it!');
  var yCoordinate = e.clientY;
  var xCoordinate = e.clientX;
}

如果是绑定到图片的点击事件,这里的e参数不是浏览器的DOM事件对象,它几乎是空的,没有clientX/clientY这些属性,所以你根本拿不到坐标值。

正确的实现方案(结合客户端HTML)

要获取鼠标坐标,必须借助客户端的HTML脚本(因为只有浏览器环境才能捕获鼠标位置),然后把坐标传递给服务器端的Apps Script。下面是一步步的实现:

1. 创建服务器端脚本(打开侧边栏)

在Apps Script编辑器里,写入这个函数:

function openCoordinateCaptureSidebar() {
  // 创建侧边栏的HTML界面
  const html = HtmlService.createHtmlOutputFromFile('Sidebar')
      .setTitle('捕获点击坐标');
  // 显示侧边栏
  SpreadsheetApp.getUi().showSidebar(html);
}

2. 创建客户端HTML文件

在Apps Script编辑器里,点击左上角的「文件」→「新建」→「HTML文件」,命名为Sidebar,然后写入以下内容:

<!DOCTYPE html>
<html>
  <body style="padding: 10px;">
    <h3>点击工作表获取坐标</h3>
    <p>X坐标: <span id="xVal" style="font-weight: bold;"></span></p>
    <p>Y坐标: <span id="yVal" style="font-weight: bold;"></span></p>
    <p>点击后坐标会自动保存到工作表A1/B1单元格</p>

    <script>
      // 监听整个页面的点击事件
      window.addEventListener('click', function(e) {
        // 获取鼠标相对于浏览器窗口的坐标
        const x = e.clientX;
        const y = e.clientY;
        
        // 更新侧边栏的坐标显示
        document.getElementById('xVal').textContent = x;
        document.getElementById('yVal').textContent = y;
        
        // 把坐标发送到服务器端脚本,保存到Sheet
        google.script.run.saveCoordinates(x, y);
      });
    </script>
  </body>
</html>

3. 创建保存坐标的服务器端函数

回到Apps Script的主脚本文件,添加这个函数:

function saveCoordinates(x, y) {
  const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 在A1单元格写入X坐标,B1写入Y坐标
  activeSheet.getRange('A1').setValue(`X坐标: ${x}`);
  activeSheet.getRange('B1').setValue(`Y坐标: ${y}`);
}

4. 绑定脚本到图片

回到你的Google Sheets,右键点击要监听的图片,选择「分配脚本」,输入函数名openCoordinateCaptureSidebar,点击确定。

使用方法

点击绑定好脚本的图片,侧边栏会弹出。之后你点击工作表里的任何位置(包括这张图片),对应的XY坐标会显示在侧边栏里,同时自动保存到工作表的A1和B1单元格。

额外说明

  • 如果只想捕获点击图片时的坐标,可以在客户端脚本里做进一步判断,但因为Sheet的内容在iframe中,跨域限制会让元素判断有点麻烦。如果你的图片是插入到固定单元格的,也可以通过脚本先获取图片的位置(getLeft()/getTop()),再用客户端捕获的坐标减去这些值计算得到。上面的方案是最通用的快速实现方式。
  • 这里的坐标是相对于浏览器窗口的坐标,如果需要相对于图片本身的坐标,你可以先通过Apps Script获取图片的位置参数,再做差值计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:34:33