Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158957
  • 博文数量: 31
  • 博客积分: 2085
  • 博客等级: 大尉
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-07 13:16
文章分类

全部博文(31)

文章存档

2014年(1)

2011年(4)

2010年(6)

2009年(2)

2008年(2)

2007年(5)

2006年(8)

2005年(3)

我的朋友

分类: WINDOWS

2010-04-15 12:03:05

关键词 Vbscript, Excel, CDO.Message, Mail
 
 
 

'报告转换程序V1.4
'本脚本用来生成报告。
'作者:程鹤
'创建时间:20010年4月7日
'更新时间时间:2010年4月7日
'使用方法: 修改本脚本的参数部分,添加计划任务,每日下午运行此脚本。
'需要安装Excel 2007

'=============================请修改以下参数==========================
const errorLogFile = ".\error.log"                                '此脚本的错误日志,记录此脚本的错误信息
Const TemplateXLT = "E:\Scripting\Template.xltx"             'Excel模板,要用绝对路径
Const ReportXLS = "E:\Scripting\Reports\QuizReport"          '最终报告的文件夹和文件名前缀,程序自动添加日期,和扩展名.xls,要用绝对路径
Const FromAddress = """CRM Quiz Report"" "
ToAddress = "a@guyanhanzhi.com," &_                '收件人地址
        "b@guyanhanzhi.com"

aBody = "大家好,附件中是今日***的报表,请查看。" & _                 '邮件正文
    "

一些文本一个链接," & _

"

DateString = year(now()) & "-" & month(now())& "-" & day(now())
aSubject = "***Report " & DateString                '邮件标题
AttachFile = ReportXLS & DateString & ".xls"          '生成的Excel文件,也是邮件的附件
'=============================请修改以上参数==============================

on error resume next

'启动脚本运行错误的日志文件
Set objFS = CreateObject ("Scripting.FileSystemObject")
if objFS.FileExists(errorLogFile) then
    objFS.DeleteFile(errorLogFile)
end if
Set objErrLog = objFS.CreateTextFile(errorLogFile)

'=========================================================================================================================

err.Number = 0
Set ExcelApp = CreateObject("Excel.Application") '创建EXCEL对象
if err.Number <> 0 then
objErrLog.WriteLine "创建Excel.Application时发生错误"
End if

ExcelApp.DisplayAlerts = False          '关掉Excel的操作提示,比如当删除一些内容时的确认对话框
ExcelApp.visible = False                 '操作Excel时窗口不可见,调试时可以打开

err.Number = 0
set ExcelBook = ExcelApp.Workbooks.add(TemplateXLT)
if err.Number <> 0 then
objErrLog.WriteLine "以" & TemplateXLT & "为模板创建Excel工作簿时发生错误,找不到此模板,或禁止访问"
End if

err.Number = 0
    'Excelbook.Activate
    With Excelbook                           '对Excel工作簿的处理
    .RefreshAll                              '更新工作簿里面的数据链接
    .Sheets("sheetname1").Select             '选中工作表
    .Sheets("sheetname1").Cells.Select          '选中工作表中所有单元格
    ExcelApp.Selection.SpecialCells(12).Select '选中工作表中所有可见单元格

    ExcelApp.Selection.Copy                    '复制
    .Sheets("sheetname2").Select
    .Sheets("sheetname2").Cells.Select           '粘贴值
    ExcelApp.Selection.PasteSpecial -4163, -4142, False, False
    
    .Sheets("sheetname3").Select
    .Sheets("sheetname3").Cells.Select
    ExcelApp.Selection.Copy
    ExcelApp.Selection.PasteSpecial -4163, -4142, False, False
    .Sheets("sheetname3").AutoFilter.Sort.SortFields.Add .Sheets("sheetname3").Range("D1"), 0, 2, 0   '添加自动过滤
    With .Sheets("sheetname3").AutoFilter.Sort               '对自动过滤进行排序
        .Header =1
        .MatchCase=False
        .Orientation=1
        .SortMethod=1
        .Apply
    End With
    .Sheets("sheetname4").Select
    .Sheets("sheetname4").Cells.Select
    ExcelApp.Selection.Copy
    ExcelApp.Selection.PasteSpecial -4163, -4142, False, False
    .Sheets("sheetname5").Select
    .Sheets("sheetname5").Cells.Select
    ExcelApp.Selection.Copy
    ExcelApp.Selection.PasteSpecial -4163, -4142, False, False

     
    .Connections("DatabaseConnection1").Delete              '删除数据链接
        
    .Sheets("sheetname1").Delete                       '删除多余的工作表
    .Sheets("sheetname2").Delete
    .Sheets("sheetname3").Delete
            
    End With

err.Number = 0        
ExcelBook.SaveAs AttachFile,56 '另存工作表为当日报告,Excel 2003兼容
if err.Number <> 0 then
objErrLog.WriteLine "不能保存工作簿,目标文件夹不能访问" & ReportXLS
End if

ExcelBook.close
excelApp.Quit

err.Number = 0
Sendmail FromAddress,ToAddress,aSubject,aBody,AttachFile '发送电子邮件
if err.Number <> 0 then
objErrLog.WriteLine "发送电子邮件错误"
End if

set ExcelSheet=nothing
set ExcelBook=nothing
set excelApp=nothing
Set objErrLog = nothing    

Sub Sendmail(FromAddress,ToAddress,aSubject,aBody,AttachFile) '发送电子邮件
Const cdoSendUsingPickup = 1 '用本地SMTP发送.
Const cdoSendUsingPort = 2 '用远程SMTP发送.

Const cdoAnonymous = 0 '匿名认证

Const cdoBasic = 1 'basic 认证
Const cdoNTLM = 2 'NTLM 认证

Set objMessage = CreateObject("CDO.Message")

'========消除乱码开始======
objMessage.BodyPart.Charset = "gb2312" 
objMessage.BodyPart.Fields.Item _  
    ("urn:schemas:mailheader:content-transfer-encoding") = "base64" 
objMessage.BodyPart.Fields.Update

'=======消除乱码结束=====
objMessage.Subject = aSubject '邮件主题
objMessage.From = FromAddress '发件人

objMessage.To = ToAddress '收件人

objMessage.HtmlBody = aBody 'HTML邮件正文

objMessage.Addattachment AttachFile
'==这部分提供远程SMTP服务器配置信息==

objMessage.Configuration.Fields.Item _
("") = 2

'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("") = "smtp.guyanhanzhi.com"

'Type of authentication, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("") = cdoBasic

'访问SMTP服务器的用户名
objMessage.Configuration.Fields.Item _
("") = "mailuser"

'访问SMTP服务器的密码
objMessage.Configuration.Fields.Item _
("") = "mailpassword"

'服务器端口(典型为25),465为SSL加密的SMTP端口
objMessage.Configuration.Fields.Item _
("port") = 465

'使用SSL连接
objMessage.Configuration.Fields.Item _
("") = True

'连接超时秒数
objMessage.Configuration.Fields.Item _
("") = 60

objMessage.Configuration.Fields.Update

'==远程SMTP服务器配置结束==

objMessage.Send
End Sub


阅读(2750) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~