用于打印 pdf 和电子邮件的 Qlikview Macro VBScript 将无法一致运行 - 电子邮件失败

问题描述 投票:0回答:1

在过去的几天里,我一直在绞尽脑汁地试图让这个宏在 Windows 调度程序上一致地工作。

基本上工作流程如下:

1) Windows Scheduler - 每日,使用管理员用户凭据

2) 批处理文件 - 使用 /l 重新加载

3) 重新加载 Qlikview 应用程序,该应用程序在重新加载后会触发保存 pdf 并使用 PDF Xchange 和 html 格式的电子邮件通过电子邮件发送以覆盖移动设备。

我的行为如此不一致,以至于我无法将问题隔离到任何特定的一件事上。有时有效,有时无效。它通常在 Windows 调度程序上失败。没有错误,因为 QV 刚刚在隐藏进程中弹出了 VBScript 窗口。

我一直在更改权限,这帮助我达到了性能不一致而不是没有性能的水平。

此外,您似乎无法将变量传递到 PDF Xchange 打印机。

宏中的代码如下:

sub ExportPDF
  printReportPDF "\\SGH-SRV-FPS1\S-Drive\eCommerce\Data Analyst\Reporting\Daily E-Commerce Report\E-Commerce Daily Report.pdf"

  ActiveDocument.GetApplication.Sleep 2000
  ActiveDocument.PrintReport "RP01", "PDF-XChange 3.0"
  ActiveDocument.GetApplication.Sleep 8000
end sub

Function printReportPDF(pdfOutputFile)
  Set WSHShell = CreateObject("WScript.Shell")
  WSHShell.RegWrite "HKCU\Software\Tracker Software\PDF-XChange 3.0\OutputFile", pdfOutputFile, "REG_SZ"
  WSHShell.RegWrite "HKCU\Software\Tracker Software\PDF-XChange 3.0\BypassSaveAs", "1", "REG_SZ"
  Set WSHShell = nothing
End function

Sub ExportEmail
  Dim strvDest 'as string
  strvDest = ActiveDocument.Variables("vDestination").GetContent().String 
  msgbox(strvDestination)

  Define report variables
  get the date as a serial for the filename output
  Export an Object

  Set obj = ActiveDocument.ActiveSheet.SheetObjects("TX25")
  Set obj1 = ActiveDocument.ActiveSheet.SheetObjects("TX17")
  Set obj2 = ActiveDocument.ActiveSheet.SheetObjects("TX18")
  Set obj3 = ActiveDocument.ActiveSheet.SheetObjects("TX15")
  Set obj5 = ActiveDocument.ActiveSheet.SheetObjects("CH62")
  Set obj6 = ActiveDocument.ActiveSheet.SheetObjects("TX16")
  Set obj8 = ActiveDocument.ActiveSheet.SheetObjects("CH58")
  Set obj9 = ActiveDocument.ActiveSheet.SheetObjects("TX31")
  Set obj10 = ActiveDocument.ActiveSheet.SheetObjects("CH69")
  msgbox("defined objects")

  obj.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\MainLogo.jpg"
  obj1.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\MainHeader.jpg"
  obj2.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\DateRange.jpg"
  obj3.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\SecondaryHeader.jpg"
  obj5.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\DailySiteDetail.jpg"
  obj6.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\SecondaryHeader2.jpg"
  obj8.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\WeeklySiteDetail.jpg" 
  obj9.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\SecondaryHeader3.jpg"
  obj10.ExportBitmapToFile "D:\QlikView\SGP-UDA\QVS_Source\UserApp\WeeklySiteDetailLW.jpg" 
  msgbox("created objects")

  Dim objEmail
  Const cdoSendUsingPort = 2    Send the message using SMTP
  Const cdoAnonymous = 0        Do not authenticate
  Const cdoBasic = 1                basic (clear-text) authentication
  Const cdoNTLM = 2                  NTLM
  Const SMTPServer = "xxxx" ' changed for public consumption
  Const SMTPPort = 25                 ' Port number for SMTP
  Const SMTPTimeout = 120              ' Timeout for SMTP in seconds

  Set objEmail = CreateObject("CDO.Message")
  Set objConf = objEmail.Configuration
  Set objFlds = objConf.Fields

  With objFlds
     ———————————————————————

     SMTP server details
     removed the html links down to this being my first post

    .Update
    ———————————————————————
  End With

  allow the passing of a variable from the load script to define the distribution list

  if len(strvDest) > 0 then
    msgbox("variable exists "&strvDest) 
    objEmail.To = strvDest
  else
    msgbox("variable does not exist") 
    objEmail.To = "xxxx" 'changed for public consumption
  end if

  objEmail.From = "xxxx" 'changed for public consumption
  objEmail.Subject = "Daily Reporting"

  HTML = "<!DOCTYPE HTML PUBLIC ""-//IETF//DTD HTML//EN"">" & chr(13) & chr(10)
  HTML = HTML & "<html>"
  HTML = HTML & "<head>"
  HTML = HTML & "<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1"">"
  HTML = HTML & "<title>Automated Emails!</title>"
  HTML = HTML & "</head>"
  HTML = HTML & "<body bgcolor=""#FFFFFF"">"

  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:MainLogo.jpg"" >"
  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:MainHeader.jpg"" >"
  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:DateRange.jpg"" >"
  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:SecondaryHeader.jpg"" >"
  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:DailySiteDetail.jpg"" >"
  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:SecondaryHeader2.jpg"" >"
  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:WeeklySiteDetail.jpg"" >"
  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:SecondaryHeader3.jpg"" >"
  HTML = HTML & "<br>&nbsp;&nbsp;&nbsp;<img src=""cid:WeeklySiteDetailLW.jpg"" >" 
  HTML = HTML & "<p>"
  HTML = HTML & "</p>"
  HTML = HTML & "</body>"
  HTML = HTML & "</html>"

  Set objBP = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\MainLogo.jpg", "MainLogo.jpg", CdoReferenceTypeName)
  objBP.Fields.Item("urn:schemas:mailheader:Content-ID") = "<MainLogo.jpg>"
  objBP.Fields.Update

  Set objBP1 = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\MainHeader.jpg", "MainHeader.jpg", CdoReferenceTypeName)
  objBP1.Fields.Item("urn:schemas:mailheader:Content-ID") = "<MainHeader.jpg>"
  objBP1.Fields.Update

  Set objBP2 = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\DateRange.jpg", "DateRange.jpg", CdoReferenceTypeName)
  objBP2.Fields.Item("urn:schemas:mailheader:Content-ID") = "<DateRange.jpg>"
  objBP2.Fields.Update

  Set objBP3 = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\SecondaryHeader.jpg", "SecondaryHeader.jpg", CdoReferenceTypeName)
  objBP3.Fields.Item("urn:schemas:mailheader:Content-ID") = "<SecondaryHeader.jpg>"
  objBP3.Fields.Update

  Set objBP5 = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\DailySiteDetail.jpg", "DailySiteDetail.jpg", CdoReferenceTypeName)
  objBP5.Fields.Item("urn:schemas:mailheader:Content-ID") = "<DailySiteDetail.jpg>"
  objBP5.Fields.Update

  Set objBP6 = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\SecondaryHeader2.jpg", "SecondaryHeader2.jpg", CdoReferenceTypeName)
  objBP6.Fields.Item("urn:schemas:mailheader:Content-ID") = "<SecondaryHeader2.jpg>"
  objBP6.Fields.Update

  Set objBP8 = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\WeeklySiteDetail.jpg", "WeeklySiteDetail.jpg", CdoReferenceTypeName)
  objBP8.Fields.Item("urn:schemas:mailheader:Content-ID") = "<WeeklySiteDetail.jpg>"
  objBP8.Fields.Update 

  Set objBP9 = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\SecondaryHeader3.jpg", "SecondaryHeader3.jpg", CdoReferenceTypeName)
  objBP9.Fields.Item("urn:schemas:mailheader:Content-ID") = "<SecondaryHeader3.jpg>"
  objBP9.Fields.Update 

  Set objBP10 = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\WeeklySiteDetailLW.jpg", "WeeklySiteDetailLW.jpg", CdoReferenceTypeName)
  objBP10.Fields.Item("urn:schemas:mailheader:Content-ID") = "<WeeklySiteDetailLW.jpg>"
  objBP10.Fields.Update

  Set objBPDoc = objEmail.AddRelatedBodyPart("D:\QlikView\SGP-UDA\QVS_Source\UserApp\Qlikview Printing.pdf", "Qlikview Printing.pdf", CdoReferenceTypeName)
  objBPDoc.Fields.Item("urn:schemas:mailheader:Content-ID") = "<Qlikview Printing.pdf>"

  objBPDoc.Fields.Update
  objEmail.HTMLBody = HTML

  msgbox("attached objects")

  objEmail.Send

Set objFlds = Nothing
Set objConf = Nothing
Set objEmail = Nothing

ActiveDocument.Save
Application.Quit

结束子

macros vbscript pdf-generation qlikview
1个回答
0
投票

我不能提问,所以我会尽力给你一个蝙蝠的答案。

  1. 首先,它是否从QV文档手动重新加载?如果是的话

    1. 那么您很可能使用 2 个不同的用户名来重新加载,请确保用于通过调度程序重新加载的用户名对 VB 正在访问的每个文件都有权限。
  2. 您是否将VB端的权限设置为以下:

    1. 请求的模块安全=系统访问
    2. 当前本地安全 = 允许系统访问

最后,在计划任务的常规屏幕上,在底部的安全选项下。确保“以最高权限运行”未被选中,这有时会导致问题。

© www.soinside.com 2019 - 2024. All rights reserved.