首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

如何通过excel自动发送邮件

发布网友 发布时间:2022-04-23 09:06

我来回答

2个回答

懂视网 时间:2022-05-02 19:48

利用EasySQLMAIL实现自动填写Excel表格并发送邮件

转自:http://blog.sina.com.cn/s/blog_1549483b70102witg.html

前一篇博文中记录了“利用EasySQLMAIL实现自动数据提取和邮件发送功能”,里面的方法只能将SQL语句查询出来的数据一行一行地原样转换到Excel表格中。但我们有一些Excel表格的样式是设计好了的,比如这种表格:   技术分享图片   表格中的单元格都是事前设计好的。每星期都需要执行几个SQL语句,并且把SQL语句的统计结果填写到表格中,发给其他部门。   仔细研究了EasySQLMAIL的手册和网站上的教程,发现其实可以用这个工具来实现自动填写和发送。 经过两天的配置和测试,终于成功。在这里把方法记录一下。   1、先设计好Excel模板表格。主要是把表格中要填数字的地方用数据单元格标识出来,这样EasySQLMAIL才能识别出哪些地方需要填写数据。修改后的模板变成这样: 技术分享图片

2、为了让统计表能够扩展,需要在A5:F5的范围内创建一个“名称”。选中A5:F5这个范围,按Ctrl+F3,名称输入"销售统计表": 技术分享图片
3、设置合计行公式。也是要在B3,C3,D3,E3,F3上分别创建“名称”,创建后的名称像下面这样: 技术分享图片   4、设置合计行的公司为SUM(销售量)、SUM(销售金额)、SUM(购物卡支付) 、SUM(现金支付)、SUM(POS机支付)。就是将SUM公式中的单元格编号换成“名称”。 技术分享图片   5、在EasySQLMAIL中创建一个任务,把做好的附件模板上传到系统中。 技术分享图片   6、设置取数的SQL语句。取数SQL一共有两个,一个是取分公司名称和统计时间的SQL,还有一个是取统计表内容的SQL。 先设置取分公司名称和统计时间的SQL: 技术分享图片


  然后设置取统计表数据的SQL。注意,“命名区域”要选择刚才新建的名称“销售统计表”。 技术分享图片

 
附件模板设置好后,再简单设置一下邮件正文和收件人等内容,最后再设置一下执行计划: 技术分享图片

执行计划的起始时间要选成星期一的日期,凌晨3点运行一次。   下面是执行后的效果:   技术分享图片

这样设置后,任务每个星期一早上3点执行,并且把表格填好后发给指定的人。例子中的查询条件stat_date = to_date(‘2015-10-12‘,‘yyyy-mm-dd‘)在实际使用的时候需要改成stat_date = trunc(sysdate),就是取当天的日期。   这几天比较忙,等空下来再研究一下在邮件里面显示统计图表的问题。   更详细的配置方法可以参考EasySQLMAIL的官方网站上的手册和文档。   http://www.easysqlmail.com 官方网站   http://www.easysqlmail.com/manual/index.html 操作手册   http://www.easysqlmail.com/docreader.php?id=346 EasySQLMAIL使用教程-使用自定义Excel文件模板   http://www.easysqlmail.com/docreader.php?id=348 在Excel表格中使用命名区域

 

利用EasySQLMAIL实现自动填写Excel表格并发送邮件(2)

标签:统计图   自定义   结果   href   family   测试   范围   选中   选择   

热心网友 时间:2022-05-02 16:56

方法/步骤

1
创建一个名字为“出货清单”Excel表单,先制作一个出货记录表格。
您可按需要自行制作,做成一行一条目。
在正常内容最后加一行用于选择是否需要自动发送邮件。

2
再增加一个名字为"清单"的Excel表单。用于列举各项常用重复内容。
例子中列举出货地址清单,联系人联系方式清单,还有料号清单。

对各个清单定义范围。这里以PNlist 命名来定义举一例,各位可按需定义。
料号清单范围定义 =清单!$G$2:OFFSET(清单!$G$1,COUNTA(清单!$G:$G)-1,0)

COUNTA(清单!$G:$G) 是用于计算G列有多少行有内容,即有多少个P/N清单。 例子计算结果为4
OFFSET($G$1,4-1,0)计算结果即为$G$4.

所以PNlist 就被成功定义为=清单!$G$2:$G$4

定义地址清单:Addresslist =清单!$A$2:offset($A$1,counta($A:$A)-1,1)
定义联系人清单:Namelist =清单!$D$2:OFFSET(清单!$D$1,COUNTA(清单!$D:$D)-1,1)

通过定义的清单来校验数据, 从而保证误输入。通过下来选择也可提高效率。

新建一个名为“模板”的Excel表单,定义要通过邮件发送的内容的模板。
后续会通过宏来拷贝模板,填充内容,调用outlook发送。

注意。 模板请放在第一行以下,因为第一行会用与拷贝发送内容过来做转制。

按如下图片步骤录制一个名为"shipment"的宏。
宏的录制是录制单条操作的内容,操作内容根据自己需要按步骤录制。
多条循环操作需稍微加几句代码。
下一步骤会介绍。

如下代码供参考:
Sub shipment()' shipment arrangement

'如下为录制内容
Sheets("出货记录").Select
Range("B3:I3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("邮件模板").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("G3:H12").Select
Application.CutCopyMode = False
Selection.Copy
Range("A3").Select
Selection.Insert Shift:=xlDown
Range("B3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-2]C[-1]"
Range("B4").Select
ActiveCell.FormulaR1C1 = "=R[-3]C[1]"
Range("B5").Select
ActiveCell.FormulaR1C1 = "=R[-4]C[2]"
Range("B6").Select
ActiveCell.FormulaR1C1 = "=R[-5]C"
Range("B7").Select
ActiveCell.FormulaR1C1 = "=R[-6]C[4]"
Range("B8").Select
ActiveCell.FormulaR1C1 = "=R[-7]C[5]"
Range("B9").Select
ActiveCell.FormulaR1C1 = "=R[-8]C[3]"
Range("B10").Select
ActiveCell.FormulaR1C1 = "=R[-9]C[6]"
Range("B3:B10").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("A1:H1").Select
Application.CutCopyMode = False
Selection.ClearContents
Sheets("出货记录").Select
Range("J3").Select
ActiveCell.FormulaR1C1 = "Closed"
Range("A3:J3").Select
Range("J3").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With
'如上为录制内容
End Sub

打开录制的宏添加循环代码。
按图片步骤及语句在录制范围前后添加循环代码。
Dim i As Integer
Dim j As Integer
Dim g As Integer
Application.ScreenUpdating = False
Sheets("出货记录").Select
i = 1
j = Application.WorksheetFunction.CountA(Range("A:A")) + 1
g = 0
'变量i 用于循环,变量j用于判断有多少行需要循环,变量g 用于邮件发送时定义有多少行需要发送
For i = 1 To j
If Range("j" & i).Value = "Y" Then
'如下为录制内容
-------------
'如上为录制内容
g = g + 1
Else
End If
Next i

录制范围部分代码需按图片更新成变量。

再添加邮件发送代码,其中有定义一个名为的 RangetoHTML()的函数。

' 以下语段用于发送邮件
Sheets("出货记录").Select
If g = "0" Then
MsgBox "No new shippment set to Y "
Else
g = 10 * g + 2
Dim OutApp As Object
Dim OutMail As Object
Dim MailBody As Range
Sheets("邮件模板").Select
Set MailBody = Range("A3:B" & g)
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)
On Error Resume Next
With OutMail
.to = "Mama@aimama.com"
.CC = ""
.BCC = ""
.Subject = "Shipment Arrangement"
.BodyFormat = Outlook.OlBodyFormat.olFormatHTML
.HTMLBody = RangetoHTML(MailBody)
.Display
End With
On Error GoTo 0
End If
Sheets("出货记录").Select
Application.ScreenUpdating = True

RangetoHTML()的函数 代码申明
将如下代码拷贝粘帖到End Sub()之后

Public Function RangetoHTML(rng As Range)
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook

TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With

Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center
x:publishsource=", _
"align=left x:publishsource=")
TempWB.Close savechanges:=False
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function

代码完成。 只需创建一个按钮方便调用此宏即可。

增加条目后把对应行内邮件通知列改成"Y",然后点“发送邮件”按钮即可弹出邮件并出货通知表单内更改状态。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com