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

如何基于含Google Drive链接的Excel批量发送带附件的邮件?

解决方案:将Google Drive链接转为PDF附件批量发邮件

方法一:Excel VBA脚本实现

步骤1:提取纯Drive文件ID

Excel附件列的HTML链接需先提取纯URL,再从中拆分出文件ID:

  • 提取纯URL(假设附件列在E1):=MID(E1,FIND("href=""",E1)+6,FIND(""" rel",E1)-FIND("href=""",E1)-6)
  • 提取文件ID(假设纯URL在F1):=MID(F1,FIND("/d/",F1)+3,FIND("/",F1,FIND("/d/",F1)+3)-FIND("/d/",F1)-3)

步骤2:VBA脚本下载PDF并发送邮件

先启用Excel开发工具,添加Microsoft HTML Object Library和Microsoft Outlook 16.0 Object Library引用,再插入以下脚本:

Sub SendEmailsWithDriveAttachments()
    Dim olApp As Outlook.Application
    Dim olMail As Outlook.MailItem
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim fileID As String
    Dim downloadURL As String
    Dim tempPath As String
    Dim fileName As String
    
    Set olApp = New Outlook.Application
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 替换为你的工作表名
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row ' C列为收件人列,按需调整
    
    tempPath = Environ("TEMP") & "\" ' 系统临时文件夹
    
    For i = 2 To lastRow ' 跳过表头行
        ' 获取提取后的文件ID
        fileID = ws.Cells(i, "F").Value ' F列为文件ID列,按需调整
        downloadURL = "https://drive.google.com/uc?export=download&id=" & fileID
        
        ' 下载PDF到临时文件夹
        fileName = "客户附件_" & i & ".pdf"
        Call DownloadFile(downloadURL, tempPath & fileName)
        
        ' 创建并发送邮件
        Set olMail = olApp.CreateItem(olMailItem)
        With olMail
            .To = ws.Cells(i, "C").Value
            .Subject = "客户咨询回复 - " & ws.Cells(i, "A").Value ' A列为姓名列
            .Body = "您好,以下是您的咨询内容回复:" & vbCrLf & ws.Cells(i, "B").Value ' B列为内容列
            .Attachments.Add tempPath & fileName
            .Send ' 改为.Display可预览邮件
        End With
        
        ' 删除临时文件
        Kill tempPath & fileName
    Next i
    
    Set olMail = Nothing
    Set olApp = Nothing
    MsgBox "批量邮件发送完成"
End Sub

' 辅助下载文件的函数
Sub DownloadFile(url As String, savePath As String)
    Dim xHTTP As Object
    Dim oStream As Object
    
    Set xHTTP = CreateObject("MSXML2.XMLHTTP")
    Set oStream = CreateObject("ADODB.Stream")
    
    xHTTP.Open "GET", url, False
    xHTTP.Send
    
    oStream.Type = 1
    oStream.Open
    oStream.Write xHTTP.responseBody
    oStream.SaveToFile savePath, 2 ' 2=覆盖已有文件
    oStream.Close
    
    Set xHTTP = Nothing
    Set oStream = Nothing
End Sub

注意:需确保Google Drive文件权限设置为「知道链接的人可下载」,否则脚本无法获取文件。

方法二:Power Automate(微软流)实现

步骤1:关联Excel文件

将编辑好的Excel文件保存到OneDrive/SharePoint,创建新流,触发方式选择「手动触发流」或「当Excel表格行添加时」。

步骤2:提取并下载Drive文件

  • 用「文本操作」提取附件列的纯URL和文件ID,逻辑同Excel公式。
  • 添加「HTTP」动作,发送GET请求到https://drive.google.com/uc?export=download&id=[文件ID],获取文件二进制内容。

步骤3:批量发送邮件

添加「发送电子邮件(V2)」动作,将HTTP返回的文件内容作为附件上传,填写收件人、主题、正文后执行流即可。

方法三:Google生态内直接处理

若可调整流程,直接在Google Sheet中补充收件人信息,用Google Apps Script实现:

function sendEmailsWithAttachments() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("表单提交");
  const data = sheet.getDataRange().getValues();
  
  for (let i = 1; i < data.length; i++) {
    const name = data[i][0];
    const content = data[i][1];
    const recipient = data[i][2];
    const link = data[i][3];
    const fileId = link.match(/file\/d\/([^\/]+)/)[1];
    
    const file = DriveApp.getFileById(fileId);
    
    GmailApp.sendEmail(
      recipient,
      `客户咨询回复 - ${name}`,
      `您好,以下是您的咨询内容回复:\n${content}`,
      { attachments: [file.getAs(MimeType.PDF)] }
    );
  }
}

此方法无需导出到Excel,权限适配更顺畅。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:32:08