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

请求修改Google Apps Script,使邮件附件PDF使用工作表名/自定义名称而非电子表格名

请求修改Google Apps Script,使邮件附件PDF使用工作表名/自定义名称而非电子表格名

看起来你已经离目标很近啦!问题出在你当前用的是整个电子表格的名称作为PDF文件名,而不是指定工作表的名称。咱们一步步调整,满足你的不同需求:

方案1:用指定工作表(Park Letter)的名称作为PDF文件名

你只需要把获取名称的对象从「整个电子表格」改成「目标工作表」,同时修正代码里一个小错误(mimeType里多了一个斜杠)。修改后的完整代码如下:

function Email3() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssID = ss.getId();
  // 改成获取目标工作表的名称,而非整个电子表格的名称
  var sheetName = ss.getSheetByName("Park Letter").getName();

  var emailRange = ss.getSheetByName("Park Letter").getRange("F20");
  var emailAddress = emailRange.getValue();

  var subject = "Coffee Morning";
  var body = ("Attached is a letter about the up coming Coffee Morning. \n \nMany thanks, \n \nCoast and Country Parks");

  var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};
  var shID = getSheetID("Park Letter");
  var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=pdf&id="+ssID+"&gid="+shID;

  var result = UrlFetchApp.fetch(url , requestData);
  var contents = result.getContent();

  // 修正mimeType的错误:把application//pdf改成application/pdf
  MailApp.sendEmail (emailAddress, subject ,body, {
    attachments:[{
      fileName: sheetName + ".pdf", 
      content: contents, 
      mimeType: "application/pdf"
    }]
  });
};

function getSheetID(name){
  var ss = SpreadsheetApp.getActive().getSheetByName(name);
  var sheetID = ss.getSheetId().toString();
  return sheetID;
}

方案2:用自定义固定名称作为PDF文件名

如果想直接指定一个你想要的固定名称(比如「Coffee_Morning_Invite.pdf」),不需要依赖工作表名,直接在fileName里写死即可:

// 替换邮件发送部分的附件代码
MailApp.sendEmail (emailAddress, subject ,body, {
  attachments:[{
    fileName: "Coffee_Morning_Invite.pdf", 
    content: contents, 
    mimeType: "application/pdf"
  }]
});

方案3:用工作表中某个单元格的值作为PDF文件名

如果想从工作表的某个单元格里读取文件名(比如「Park Letter」工作表的B2单元格),可以先获取该单元格的值,再作为文件名使用:

function Email3() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssID = ss.getId();
  var targetSheet = ss.getSheetByName("Park Letter");
  // 从B2单元格读取文件名,你可以改成任意需要的单元格地址
  var customFileName = targetSheet.getRange("B2").getValue();

  var emailRange = targetSheet.getRange("F20");
  var emailAddress = emailRange.getValue();

  var subject = "Coffee Morning";
  var body = ("Attached is a letter about the up coming Coffee Morning. \n \nMany thanks, \n \nCoast and Country Parks");

  var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};
  var shID = getSheetID("Park Letter");
  var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=pdf&id="+ssID+"&gid="+shID;

  var result = UrlFetchApp.fetch(url , requestData);
  var contents = result.getContent();

  // 使用单元格的值作为文件名,记得加上.pdf后缀
  MailApp.sendEmail (emailAddress, subject ,body, {
    attachments:[{
      fileName: customFileName + ".pdf", 
      content: contents, 
      mimeType: "application/pdf"
    }]
  });
};

function getSheetID(name){
  var ss = SpreadsheetApp.getActive().getSheetByName(name);
  var sheetID = ss.getSheetId().toString();
  return sheetID;
}

另外提醒下:原代码里的mimeType写的是"application//pdf"(两个斜杠),这是个小错误,已经在上面的代码里修正为"application/pdf",避免附件识别出问题。

备注:内容来源于stack exchange,提问作者V Allan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:44:29