<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article QLIKVIEW AUTOMATION WITH PYTHON IS BACK! in Member Articles</title>
    <link>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/ta-p/1806332</link>
    <description>&lt;P&gt;Over a year and half ago, I published instructions for creating a class to communicate with Qlikview api using the Python language. Here is the link for your convenience:&amp;nbsp;&lt;SPAN class="Y2IQFc"&gt;&lt;A title="QLIKVIEW AUTOMATION WITH PYTHON" href="https://community.qlik.com/t5/Documents/QLIKVIEW-AUTOMATION-WITH-PYTHON/ta-p/1645028" target="_blank" rel="noopener"&gt;QLIKVIEW AUTOMATION WITH PYTHON&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="Y2IQFc"&gt;Many of you have written and sent me messages requesting to make a new post containing the instructions to extract Qlikview pivot tables in excel and send them via email.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;So after more than a year and a pandemic in action, here is an example of extracting Qlikview tables and sending as an email attachment. All tested with Python 3.9&lt;/P&gt;&lt;P&gt;&lt;SPAN class="Y2IQFc"&gt;You can found the full files and code at &amp;nbsp;&lt;A href="https://github.com/MatteoMinischetti/PyQlikSender" target="_blank" rel="noopener"&gt;GITHUB&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="Y2IQFc"&gt;Here I post only the Python script.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Basically, there is a configuration file of the email parameters and the path of the qlikview file. The qlikview script defines the table &amp;nbsp;containing the people who must receive the emails with their addresses and the table fields to be filtered with the filter value to be used to reduce the data.&lt;/P&gt;&lt;P&gt;Hoping you like it, &amp;nbsp;for question or issues write me on GitHub.&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.linkedin.com/in/matteominischetti" target="_self"&gt;Matteo Minischetti&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;PyQlikSender.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;from &lt;/SPAN&gt;win32com.client &lt;SPAN&gt;import &lt;/SPAN&gt;Dispatch&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;# pywin32 module&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;smtplib&lt;BR /&gt;&lt;SPAN&gt;from &lt;/SPAN&gt;email.message &lt;SPAN&gt;import &lt;/SPAN&gt;EmailMessage&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;os.path&lt;BR /&gt;&lt;SPAN&gt;from &lt;/SPAN&gt;datetime &lt;SPAN&gt;import &lt;/SPAN&gt;datetime&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;configparser&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;logging&lt;BR /&gt;&lt;BR /&gt;current_path = os.getcwd()&lt;BR /&gt;config = configparser.ConfigParser()&lt;BR /&gt;config.read_file(&lt;SPAN&gt;open&lt;/SPAN&gt;(&lt;SPAN&gt;r'PyQlikSenderConf.txt'&lt;/SPAN&gt;))&lt;BR /&gt;QLIKVIEW_DOCUMENT = config.get(&lt;SPAN&gt;'configuration'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'QLIKVIEW_DOCUMENT'&lt;/SPAN&gt;)&lt;BR /&gt;SMTP_ADDRESS = config.get(&lt;SPAN&gt;'configuration'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'SMTP_ADDRESS'&lt;/SPAN&gt;)&lt;BR /&gt;SMTP_PORT = config.get(&lt;SPAN&gt;'configuration'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'SMTP_PORT'&lt;/SPAN&gt;)&lt;BR /&gt;EMAIL_FROM = config.get(&lt;SPAN&gt;'configuration'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'EMAIL_FROM'&lt;/SPAN&gt;)&lt;BR /&gt;EMAIL_LOGIN = config.get(&lt;SPAN&gt;'configuration'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'EMAIL_LOGIN'&lt;/SPAN&gt;)&lt;BR /&gt;EMAIL_PASSWORD = config.get(&lt;SPAN&gt;'configuration'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'EMAIL_PASSWORD'&lt;/SPAN&gt;)&lt;BR /&gt;LOGFILE = config.get(&lt;SPAN&gt;'configuration'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'logfile'&lt;/SPAN&gt;)&lt;BR /&gt;QVRELOAD = config.get(&lt;SPAN&gt;'configuration'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'QVRELOAD'&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;class &lt;/SPAN&gt;QlikView:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;__init__&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;self&lt;/SPAN&gt;.app = Dispatch(&lt;SPAN&gt;'QlikTech.QlikView'&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;opendoc&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;docname&lt;SPAN&gt;, &lt;/SPAN&gt;username&lt;SPAN&gt;, &lt;/SPAN&gt;password):&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;doc = &lt;SPAN&gt;self&lt;/SPAN&gt;.app.OpenDoc(docname&lt;SPAN&gt;, &lt;/SPAN&gt;username&lt;SPAN&gt;, &lt;/SPAN&gt;password)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;return &lt;/SPAN&gt;doc&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;reload&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;doc):&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;doc.Reload()&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;clearall&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;doc):&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;doc.ClearAll()&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;apply_field_filter&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;doc&lt;SPAN&gt;, &lt;/SPAN&gt;filter_field&lt;SPAN&gt;, &lt;/SPAN&gt;filter_value):&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;doc.Fields(filter_field).Select(filter_value)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;closedoc&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;doc):&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;doc.CloseDoc()&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;sendmail&lt;/SPAN&gt;(email&lt;SPAN&gt;, &lt;/SPAN&gt;subject&lt;SPAN&gt;,&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;name&lt;SPAN&gt;, &lt;/SPAN&gt;surname&lt;SPAN&gt;, &lt;/SPAN&gt;filename):&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;msg = EmailMessage()&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;msg[&lt;SPAN&gt;'Subject'&lt;/SPAN&gt;] = subject&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;msg[&lt;SPAN&gt;'From'&lt;/SPAN&gt;] = EMAIL_FROM&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;msg[&lt;SPAN&gt;'To'&lt;/SPAN&gt;] = email&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;content = &lt;SPAN&gt;'Dear ' &lt;/SPAN&gt;+ name + &lt;SPAN&gt;' ' &lt;/SPAN&gt;+ surname + &lt;SPAN&gt;'&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;your report is attached here'&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;msg.set_content(content)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;with &lt;/SPAN&gt;&lt;SPAN&gt;open&lt;/SPAN&gt;(filename&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'rb'&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;xls:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;msg.add_attachment(xls.read()&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;maintype&lt;/SPAN&gt;=&lt;SPAN&gt;'application'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;subtype&lt;/SPAN&gt;=&lt;SPAN&gt;'octet-stream'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;filename&lt;/SPAN&gt;=xls.name)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;except &lt;/SPAN&gt;&lt;SPAN&gt;Exception &lt;/SPAN&gt;&lt;SPAN&gt;as &lt;/SPAN&gt;e:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;'cannot open attachment to send, error :' &lt;/SPAN&gt;+ &lt;SPAN&gt;str&lt;/SPAN&gt;(e))&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;with &lt;/SPAN&gt;smtplib.SMTP_SSL(SMTP_ADDRESS&lt;SPAN&gt;, &lt;/SPAN&gt;SMTP_PORT) &lt;SPAN&gt;as &lt;/SPAN&gt;smtp:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;smtp.login(EMAIL_LOGIN&lt;SPAN&gt;, &lt;/SPAN&gt;EMAIL_PASSWORD)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;smtp.send_message(msg)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;except &lt;/SPAN&gt;&lt;SPAN&gt;Exception &lt;/SPAN&gt;&lt;SPAN&gt;as &lt;/SPAN&gt;e:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;logging.info(&lt;SPAN&gt;'cannot send email to : ' &lt;/SPAN&gt;+ email + &lt;SPAN&gt;' , error :' &lt;/SPAN&gt;+ &lt;SPAN&gt;str&lt;/SPAN&gt;(e))&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;manage_document&lt;/SPAN&gt;(docname&lt;SPAN&gt;, &lt;/SPAN&gt;current_path&lt;SPAN&gt;, &lt;/SPAN&gt;tb_email):&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;username = &lt;SPAN&gt;None&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;password = &lt;SPAN&gt;None&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;q = QlikView()&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;version = q.app.QvVersion()&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;print&lt;/SPAN&gt;(version)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;doc = q.opendoc(docname&lt;SPAN&gt;, &lt;/SPAN&gt;username&lt;SPAN&gt;, &lt;/SPAN&gt;password)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if &lt;/SPAN&gt;QVRELOAD == &lt;SPAN&gt;'Y'&lt;/SPAN&gt;:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;q.reload(docname)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;email_table = doc.GetSheetObject(tb_email)&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;# the object table containing email to send and filter to apply&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;today_date = &lt;SPAN&gt;str&lt;/SPAN&gt;(datetime.today().date()).replace(&lt;SPAN&gt;'-'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'_'&lt;/SPAN&gt;)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;rowiter = &lt;SPAN&gt;0&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;rows = email_table.GetRowCount()&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;while &lt;/SPAN&gt;rowiter &amp;lt; rows:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;title = email_table.GetCell(rowiter&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;).Text&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;name = email_table.GetCell(rowiter&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;).Text&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;surname = email_table.GetCell(rowiter&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;2&lt;/SPAN&gt;).Text&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;email = email_table.GetCell(rowiter&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;).Text&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;company = email_table.GetCell(rowiter&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;4&lt;/SPAN&gt;).Text&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;filter_field = email_table.GetCell(rowiter&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;5&lt;/SPAN&gt;).Text&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;filter_value = email_table.GetCell(rowiter&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;).Text&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;tb1 = email_table.GetCell(rowiter&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;7&lt;/SPAN&gt;).Text&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;print&lt;/SPAN&gt;(title&lt;SPAN&gt;, &lt;/SPAN&gt;name&lt;SPAN&gt;, &lt;/SPAN&gt;surname&lt;SPAN&gt;, &lt;/SPAN&gt;email&lt;SPAN&gt;, &lt;/SPAN&gt;company)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;rowiter = rowiter + &lt;SPAN&gt;1&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;subject = &lt;SPAN&gt;"Qlikview report service for: " &lt;/SPAN&gt;+ company&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if &lt;/SPAN&gt;rowiter &amp;gt; &lt;SPAN&gt;1&lt;/SPAN&gt;:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;filename = tb1 + &lt;SPAN&gt;'_' &lt;/SPAN&gt;+ name + &lt;SPAN&gt;'_' &lt;/SPAN&gt;+ surname + &lt;SPAN&gt;'_' &lt;/SPAN&gt;+ today_date + &lt;SPAN&gt;'.xls'&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;q.clearall(docname)&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;# clear all filter&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;doc.Fields(filter_field).Select(filter_value)&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;# apply filter&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;chart = doc.GetSheetObject(tb1)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;except &lt;/SPAN&gt;&lt;SPAN&gt;Exception &lt;/SPAN&gt;&lt;SPAN&gt;as &lt;/SPAN&gt;e:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;logging.info(&lt;SPAN&gt;'error: ' &lt;/SPAN&gt;+ &lt;SPAN&gt;str&lt;/SPAN&gt;(e))&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;chart_path = current_path + &lt;SPAN&gt;'/' &lt;/SPAN&gt;+ filename&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;chart.ExportBiff(chart_path)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;sendmail(email&lt;SPAN&gt;, &lt;/SPAN&gt;subject&lt;SPAN&gt;, &lt;/SPAN&gt;name&lt;SPAN&gt;, &lt;/SPAN&gt;surname&lt;SPAN&gt;, &lt;/SPAN&gt;filename)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;q.closedoc(doc)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;q.app.Quit()&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if &lt;/SPAN&gt;__name__ == &lt;SPAN&gt;'__main__'&lt;/SPAN&gt;:&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;doc = current_path + &lt;SPAN&gt;'/' &lt;/SPAN&gt;+ QLIKVIEW_DOCUMENT&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;logging.basicConfig(&lt;SPAN&gt;format&lt;/SPAN&gt;=&lt;SPAN&gt;'%(asctime)s - %(message)s'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;filename&lt;/SPAN&gt;=LOGFILE&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;encoding&lt;/SPAN&gt;=&lt;SPAN&gt;'utf-8'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;level&lt;/SPAN&gt;=logging.DEBUG)&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;tb_email = &lt;SPAN&gt;'email' &lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;# qlikview table containing email address and info&lt;BR /&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;manage_document(doc&lt;SPAN&gt;, &lt;/SPAN&gt;current_path&lt;SPAN&gt;, &lt;/SPAN&gt;tb_email)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 21 Sep 2022 17:07:35 GMT</pubDate>
    <dc:creator>matteo_mi</dc:creator>
    <dc:date>2022-09-21T17:07:35Z</dc:date>
    <item>
      <title>QLIKVIEW AUTOMATION WITH PYTHON IS BACK!</title>
      <link>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/ta-p/1806332</link>
      <description>&lt;P&gt;QLIKVIEW AUTOMATION WITH PYTHON IS BACK!&lt;/P&gt;</description>
      <pubDate>Wed, 21 Sep 2022 17:07:35 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/ta-p/1806332</guid>
      <dc:creator>matteo_mi</dc:creator>
      <dc:date>2022-09-21T17:07:35Z</dc:date>
    </item>
    <item>
      <title>Re: QLIKVIEW AUTOMATION WITH PYTHON IS BACK!</title>
      <link>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1818991#M399</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/6437"&gt;@matteo_mi&lt;/a&gt;&amp;nbsp;, I have tried this code, however I am getting an error on Reload function, any idea why this error.&lt;/P&gt;&lt;P&gt;Traceback (most recent call last):&lt;BR /&gt;File "D:\PyQlikSender-master\PyQlikSender.py", line 114, in &amp;lt;module&amp;gt;&lt;BR /&gt;manage_document(doc, current_path, tb_email)&lt;BR /&gt;File "D:\PyQlikSender-master\PyQlikSender.py", line 73, in manage_document&lt;BR /&gt;q.reload(docname)&lt;BR /&gt;File "D:\PyQlikSender-master\PyQlikSender.py", line 31, in reload&lt;BR /&gt;doc.Reload()&lt;BR /&gt;AttributeError: 'str' object has no attribute 'Reload'&lt;/P&gt;</description>
      <pubDate>Thu, 01 Jul 2021 02:39:34 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1818991#M399</guid>
      <dc:creator>basav</dc:creator>
      <dc:date>2021-07-01T02:39:34Z</dc:date>
    </item>
    <item>
      <title>Re: QLIKVIEW AUTOMATION WITH PYTHON IS BACK!</title>
      <link>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1819006#M400</link>
      <description>&lt;P&gt;Hi Basavaraju_S &amp;nbsp;you are right!&lt;/P&gt;&lt;P&gt;The problem is the variable passed to the reload, should be doc instead of docname&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;q.reload(docname)&amp;nbsp;should be changed in q.reload(doc)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;let me know if this solve your&amp;nbsp;problem.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 01 Jul 2021 06:55:47 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1819006#M400</guid>
      <dc:creator>matteo_mi</dc:creator>
      <dc:date>2021-07-01T06:55:47Z</dc:date>
    </item>
    <item>
      <title>Re: QLIKVIEW AUTOMATION WITH PYTHON IS BACK!</title>
      <link>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1819246#M401</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/6437"&gt;@matteo_mi&lt;/a&gt;&amp;nbsp;, Thanks for the reply.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have changed the name to 'doc', application opened, reloaded, and filter was applied.&amp;nbsp;&lt;/P&gt;&lt;P&gt;However getting the attribution error again, please find below.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Traceback (most recent call last):&lt;BR /&gt;File "D:\PyQlikSender-master\PyQlikSender.py", line 114, in &amp;lt;module&amp;gt;&lt;BR /&gt;manage_document(doc, current_path, tb_email)&lt;BR /&gt;File "D:\PyQlikSender-master\PyQlikSender.py", line 102, in manage_document&lt;BR /&gt;chart.ExportBiff("D:\PyQlikSender-master\exampletable1.xls")&lt;BR /&gt;AttributeError: 'NoneType' object has no attribute 'ExportBiff'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have checked your previous article on the same, where Danosoft had mentioned to use&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;ExportBitmapToFile or Exporthtml&lt;BR /&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;But even these are throwing the attribution error. Am I doing something wrong here?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the tables I have manually mentioned the object ID TB01 is 'email' and TB02 is 'tb1'&amp;nbsp; &amp;nbsp; &amp;nbsp; perhaps I could be wrong here?&lt;/P&gt;</description>
      <pubDate>Fri, 02 Jul 2021 04:16:46 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1819246#M401</guid>
      <dc:creator>basav</dc:creator>
      <dc:date>2021-07-02T04:16:46Z</dc:date>
    </item>
    <item>
      <title>Re: QLIKVIEW AUTOMATION WITH PYTHON IS BACK!</title>
      <link>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1819249#M402</link>
      <description>&lt;P&gt;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/6437"&gt;@matteo_mi&lt;/a&gt;&amp;nbsp;, I figured it out what I was doing wrong. Its working fine now.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Before the ExportBiff, where we are fetching the second table through ObjectID I had given it wrong. Now its running fine. Thank you.&lt;/P&gt;&lt;P&gt;However the logging package is not working, something to do with the version. So I have commented it out.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 02 Jul 2021 04:25:59 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1819249#M402</guid>
      <dc:creator>basav</dc:creator>
      <dc:date>2021-07-02T04:25:59Z</dc:date>
    </item>
    <item>
      <title>Re: QLIKVIEW AUTOMATION WITH PYTHON IS BACK!</title>
      <link>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1819901#M403</link>
      <description>&lt;P&gt;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/6437"&gt;@matteo_mi&lt;/a&gt;&amp;nbsp;Good Day, I have got a new requirement, where I need to attach table image on the mail body, I am hoping you have an answer for this too, Any help is much appreciated. Thanks.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I searched online for this, but still no luck.&lt;/P&gt;</description>
      <pubDate>Mon, 05 Jul 2021 17:30:46 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1819901#M403</guid>
      <dc:creator>basav</dc:creator>
      <dc:date>2021-07-05T17:30:46Z</dc:date>
    </item>
    <item>
      <title>Re: QLIKVIEW AUTOMATION WITH PYTHON IS BACK!</title>
      <link>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1884254#M404</link>
      <description>&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;A href="https://community.qlik.com/t5/user/viewprofilepage/user-id/6437" target="_blank"&gt;@matteo_mi&lt;/A&gt;&amp;nbsp;, Good Day, &lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;I have got the same error "AttributeError: 'QlikView' object has no attribute 'reload' " even after changing q.reload(docname) to q.reload(doc)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;. Please tell me what could be the problem. &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;Also, if I want to save the file after reload of new data, what will the script look like? Is that right? &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;class QlikView: &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def Save(self,doc): &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; doc.Save() &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;def ManageDocument(): &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="VIiyi"&gt;&lt;SPAN class="JLqJ4b ChMk0b" data-language-for-alternatives="en" data-language-to-translate-into="ru" data-phrase-index="1" data-number-of-phrases="2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; q.save(doc) &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 24 Jan 2022 04:47:05 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Member-Articles/QLIKVIEW-AUTOMATION-WITH-PYTHON-IS-BACK/tac-p/1884254#M404</guid>
      <dc:creator>Gau</dc:creator>
      <dc:date>2022-01-24T04:47:05Z</dc:date>
    </item>
  </channel>
</rss>

