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

基于推荐人名称写入指定Google Sheet异常:仅写入默认Sheet

问题原因与解决方案

核心问题根源

你代码里的关键问题是:PHP将referralSheetName放在了请求URL的查询参数中,但Google Apps Script的doPost函数里,e.parameter仅会解析POST请求体中的表单数据,不会自动读取URL上的查询参数。因此e.parameter.referralSheetName始终为undefined,代码触发默认值'Master',导致数据全部写入默认表。


解决方案1:将参数移入POST表单(推荐)

修改PHP的writeToSheet函数,把referralSheetName从URL参数转移到POST表单数据里:

function writeToSheet($ref_name) {
  global $MasterUrl, $dt, $tm, $quote_branch, $quote_service, $quote_fullname, $quote_vmm, $rlevel;
  $scriptURL = $MasterUrl;
  $ref_name = ucfirst(strtolower($ref_name));
  $sheetName = $ref_name;

  $form_data = [
    'referralSheetName' => $sheetName, // 新增该行,将参数放入表单
    'Date' => $dt,
    'Time' => $tm,
    'Branch' => $quote_branch,
    'Service' => $quote_service,
    'Full Name' => $quote_fullname,
    'Vehicle Make & Model' => $quote_vmm,
    'Referral Level' => $rlevel,
    'Status' => $ref_name
  ];

  $options = [
    'http' => [
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($form_data),
    ],
  ];

  // 直接使用原始MasterUrl,无需拼接查询参数
  $context  = stream_context_create($options);
  $result = file_get_contents($scriptURL, false, $context);
  
  $_SESSION['result'] = $result;
  var_dump($result);
}

Google Apps Script代码无需修改,此时e.parameter.referralSheetName就能正确获取到目标Sheet名称。


解决方案2:在GAS中手动解析URL查询参数

如果不想修改PHP代码,可以调整Google Apps Script的doPost函数,手动解析URL上的查询参数:

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

  try {
    var sheetName = 'Master'; // 默认值
    // 解析URL查询参数
    if (e.queryString) {
      var params = e.queryString.split('&').reduce(function(obj, param) {
        var parts = param.split('=');
        obj[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
        return obj;
      }, {});
      sheetName = params.referralSheetName || 'Master';
    }

    var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'));
    var sheet = doc.getSheetByName(sheetName);

    // 后续逻辑保持不变
    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 }))
      .setMimeType(ContentService.MimeType.JSON);
  } finally {
    lock.releaseLock();
  }
}

额外验证要点

  1. 确认PHP处理后的$sheetName(ucfirst(strtolower($ref_name)))与Google Sheet的标签名称完全一致(包括空格、大小写格式),比如Sheet标签是"John Doe",需保证处理后的字符串匹配该格式。
  2. 检查Google Apps Script中scriptProp.getProperty('key')是否正确获取到目标Spreadsheet的ID,无拼写错误。

内容的提问来源于stack exchange,提问作者Ryan Nantes Paco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:08:19