Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Enviar informe por correo

Hola a todos, tengo algún informe realizado en QV y necesito que cuando se acabe la recarga nocturna de los datos se envía automaticamente un mail a las direcciones especificadas. (no utilizo Qv Server). Alguien sabe como hacerlo?

7 Replies
Not applicable
Author

Buenos dias

Te recomiendo la lectura del Manual de Referencia, desde su pag 207 a la 221 (ALERTAS)

Desde la version 8.5 "creo", existen las ALERTAS, incluso con un ASISTENTE que te ayudara a crear una ALERTA y enviar un correo con el asunto que quieras y a las personas que quieras

Espero que te ayude

Saludos

Not applicable
Author

Muchas gracias Luis,

ya había revisado estas alertas, pero lo que yo necesito no es enviar un mail predeterminado sino enviar el gráfico que genera el informe. No se si me explico?

Muchas gracias de nuevo

Not applicable
Author

Hola Bucky,

nose si te puede servir, pero yo he usado en alguna ocasión la macro que adjunto para enviar mails, y funciona. Hay poco que configurar, y puede que haya algo en catalán, pero si necesitas más ayuda me lo comentas.

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

sub enviaMailOld

ruta_base = "C:\Informes\PowerPoints\"

envio_funcio "mail@mail.com","Frase sujeto","Cuerpo Mensaje",ruta_base & "Informe.ppt"


end sub

Function envio_funcio (desti,remit,subj,cosmis,adjun)

'Definir el puerto de envío
Const cdoSendUsingPort = 2
Const cdoSMTPAuthenticate = 1

'Enviar un mail utilizando CDO (Collaboration Data Object, componente de Win 2000)
Set objCDOMail = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
'Introducir el smtp correspondiente
objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.com"
objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoSMTPAuthenticate
objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "b"
objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "g"
objConf.Fields.Update
Set objCDOMail.configuration = objConf
'Usuario que recibirá el correo:
objCDOMail.To = desti
'Usuario que envía el correo:
objCDOMail.From = remit
'Texto del asunto del mensaje:
objCDOMail.Subject = subj

'Texto del cuerpo del mensaje:
strHTML = cosmis

objCDOMail.HTMLBody = strHTML

'Si fuese necesario podríamos adjuntar un archivo:
objCDOMail.AddAttachment adjun

objCDOMail.Send

Set objCDOMail = Nothing
Set objConf = Nothing

end function


Espero que te sirva!!

Pol

Not applicable
Author

Primero, muchísimas gracias por contestar Smile

estoy comprobando y por ahora me está fallando el "Set objCDOMail = CreateObject("CDO.Message", veo en foros varias opciones pero por ahora no me funciona. También he añadido aquí el remitente:

"mail@mail.com", "remitente@remitente.com","Frase sujeto","Cuerpo Mensaje",ruta_base & "Informe.ppt" ya que me fallaba en ese punto.

Cuando lo consiga (si lo consigo Stick out tongue) seguramente me valdrá para otra ocasión, pero en este caso lo que necesito es enviar solamente un gráfico del informe, no el informe. Es decir un objeto en el que se muestran unos datos, y exportar este como un xls o una imagen para enviarlo a usuarios que no tengan Qlikview instalado.

Muchas gracias de nuevo!

Not applicable
Author

Si lo que necesitas es generar un excel con una imagen, o tabla, o cualquier gráfico, puedes usar este código:

'PARTE COMUN EN TODOS LOS INFORMES EXCEL
sub A_InformeExcel_ParteComun

dim oDQVInformeExcel
dim oDQVUtils
dim bError
dim auxiliar
dim var
dim linea
dim columna
dim avanza

bError = false

Set oDQVInformeExcel = CreateObject("QlikTech.QlikView")
Set oDQVUtils = CreateObject("QlikTech.QlikView")

Set xls = CreateObject("EXCEL.APPLICATION")

ruta = ActiveDocument.GetPathName

pos = InstrRev(ruta,"\")

ruta_bona = left(ruta,pos)

''MENSAJE ASINCRONO
'if (not oDllUtils.Inicializar(ActiveDocument)) then bError=true

'oDllUtils.MostrarMsgAsincronico "Espere por favor...", "Creando Informe Excel"
''

TemplateFile = ruta_bona & "Informes\Plantilla\INFO_MENSUAL.xls"

If Not xls Is Nothing Then

Set objWorkbook = xls.Workbooks.open (TemplateFile)

If objWorkbook Is Nothing Then

msgbox "No se ha podido acceder al fichero < "& TemplateFile & " >. Por favor mire si la ruta existe."

exit sub

else

'msgbox "Abierto el informe de Excel"

xls.Visible = False

end if

else


msgbox "No se ha podido acceder a Microsoft EXCEL"

exit sub

end if

'xls.Visible = True
'=================================================================================================

'CUERPO DE LA MACRO

'=============================================================================================
ActiveDocument.GetSheetObject("CH345").CopyBitmapToClipboard
xls.Cells(traslado+1,6).Select
xls.ActiveSheet.Paste
xls.Selection.ShapeRange.ScaleWidth 1, 0, 0
xls.Selection.ShapeRange.ScaleHeight 1, 0, 0
'' Cerramos y guardamos
'OPCION 2 --> Salvar en un directorio normal
salva = ruta_bona & "Informes\INFO"&right(year(now()),2) &"_"&month(now)&"_"&day(now())&".xls"

xls.ActiveWorkbook.SaveAs salva

'fem visible l'excel

xls.Visible = True

'Ocultar Mensage asíncrono
'oDllUtils.OcultarMsgActual

if (bError) then Msgbox "Ha sucedido un error durante la generación del informe", vbCritical or vbOKOnly, "Error"
end sub


En la parte cuerpo de la macro puedes modificar el tamaño y la posición del gráfico.

Saludos!
Pol

EDITO: Lo siento, ha quedado un poco chungo el código, pero funciona... jeje

Not applicable
Author

Big SmileBig Smile Excelente!!!!

Muchísimas gracias!! al final el error que me daba era una tontería que no tenía nada que ver con el código, simplemente era cambiar la Seguridad de Módulo Requerida a "Acceso al Sistema" (en la ventana de Editor de módulo, abajo a la izquierda).

Con tú código perfecto, al final he utilizado los dos y primero cojo los datos de la tabla:

ActiveDocument.GetSheetObject("Grafico").CopyTableToClipboard True, los guardo en un xls y luego los envío por correo a los usuarios.

Lo dicho. Muchas gracias!

Not applicable
Author

De nada! Me alegro que te haya servido... que al final uno se siente como un chupoptero siempre preguntando pero nunca respondiendo.. jeje

Hasta la próxima!
Pol