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

外部网站调用已发布Google Apps Script自定义函数的实现方法咨询

问题解答

1. 是否支持从外部网站直接调用Apps Script自定义函数?

不支持。Google Apps Script发布为Web服务时,仅对外暴露doGet()和doPost()两个固定入口函数,你自行定义的其他函数(比如你写的deleteunder1minutepassengerinput2())无法被外部请求直接调用,所有外部逻辑都需要通过这两个入口函数中转。

2. 如何调用目标删除函数?

你只需要修改doPost()逻辑,增加请求参数判断,根据不同的参数执行对应的操作即可,具体修改步骤如下:

步骤1:修改Google Apps Script代码

首先优化删除函数的表格获取逻辑(避免Web App运行时获取活动表格异常),再修改doPost()增加操作判断:

var sheetName = 'Mulawin'
var scriptProp = PropertiesService.getScriptProperties()

function intialSetup () {
  var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  scriptProp.setProperty('key', activeSpreadsheet.getId())
}

function doPost (e) {
  var lock = LockService.getScriptLock()
  lock.tryLock(10000)

  try {
    var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
    var sheet = doc.getSheetByName(sheetName)
    // 新增:判断请求的操作类型
    var action = e.parameter.action
    if(action === 'delete') {
      // 调用删除函数
      deleteunder1minutepassengerinput2(doc)
      return ContentService
        .createTextOutput(JSON.stringify({ 'result': 'success', 'msg': '删除操作执行完成' }))
        .setMimeType(ContentService.MimeType.JSON)
    }
    // 原有表单提交逻辑
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
    var nextRow = sheet.getLastRow() + 1

    var newRow = headers.map(function(header) {
      return header === 'Timestamp' ? new Date() : e.parameter[header]
    })

    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])

    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e.toString() }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  finally {
    lock.releaseLock()
  }
}

// 优化删除函数,直接传入已打开的表格对象
function deleteunder1minutepassengerinput2(doc) {
  var sheet = doc.getSheetByName('Mulawin');
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= numRows-1 ; i++) {
    var row = values[i];
    if (row[32] == 'delete') {
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
}

修改完成后需要重新发布新版本的Web App,否则修改不会生效。

步骤2:前端调用删除函数的代码示例

你可以在前端页面添加触发删除的逻辑,比如绑定按钮点击事件发送带action=delete参数的POST请求:

// 触发删除操作的示例代码
function triggerDelete() {
  const scriptURL = '你的Web App地址'
  const formData = new FormData()
  formData.append('action', 'delete')
  fetch(scriptURL, { method: 'POST', body: formData})
    .then(res => res.json())
    .then(data => {
      console.log('删除完成', data)
      // 这里可以加你自己的后续逻辑,比如提示用户操作完成
    })
    .catch(error => console.error('删除出错', error.message))
}

你原有提交表单的逻辑不需要修改,还是可以正常使用。

注意事项

  • Web App的权限需要设置为「任何人,甚至匿名用户」才能被外部网站正常调用
  • 每次修改Apps Script代码后,都需要部署新的版本,不能只点击保存按钮
  • 如果需要限制删除操作的调用权限,可以在代码里加校验逻辑,比如校验请求里的秘钥参数,避免被恶意调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:15:00