Thanks guys it took me a while and a lot of research, finally get it to work.
my view.py
import pandas as pd
from django.http import HttpResponse
try:
from io import BytesIO as IO # for modern python
except ImportError:
from StringIO import StringIO as IO # for legacy python
def download_excel(request):
if "selectdate" in request.POST:
if "selectaccount" in request.POST:
selected_date = request.POST["selectdate"]
selected_acc = request.POST["selectaccount"]
if selected_date==selected_date:
if selected_acc==selected_acc:
convert=datetime.datetime.strptime(selected_date, "%Y-%m-%d").toordinal()
engine=create_engine('mssql+pymssql://username:password@servername /db')
metadata=MetaData(connection)
fund=Table('gltrxdet',metadata,autoload=True,autoload_with=engine)
rate=Table('gltrx_all',metadata,autoload=True,autoload_with=engine)
stmt=select([fund.columns.account_code,fund.columns.description,fund.columns.nat_balance,rate.columns.date_applied,fund.columns.journal_ctrl_num,rate.columns.journal_ctrl_num])
stmt=stmt.where(and_(rate.columns.journal_ctrl_num==fund.columns.journal_ctrl_num,fund.columns.account_code==selected_acc,rate.columns.date_applied==convert))
results=connection.execute(stmt)
sio = StringIO()
df = pd.DataFrame(data=list(results), columns=results.keys())
####dowload excel file##########
excel_file = IO()
xlwriter = pd.ExcelWriter(excel_file, engine='xlsxwriter')
df.to_excel(xlwriter, 'sheetname')
xlwriter.save()
xlwriter.close()
excel_file.seek(0)
response = HttpResponse(excel_file.read(), content_type='application/ms-excel vnd.openxmlformats-officedocument.spreadsheetml.sheet')
# set the file name in the Content-Disposition header
response['Content-Disposition'] = 'attachment; filename=myfile.xls'
return response
from django.http import HttpResponse
try:
from io import BytesIO as IO # for modern python
except ImportError:
from StringIO import StringIO as IO # for legacy python
def download_excel(request):
if "selectdate" in request.POST:
if "selectaccount" in request.POST:
selected_date = request.POST["selectdate"]
selected_acc = request.POST["selectaccount"]
if selected_date==selected_date:
if selected_acc==selected_acc:
convert=datetime.datetime.strptime(selected_date, "%Y-%m-%d").toordinal()
engine=create_engine('mssql+pymssql://username:password@servername /db')
metadata=MetaData(connection)
fund=Table('gltrxdet',metadata,autoload=True,autoload_with=engine)
rate=Table('gltrx_all',metadata,autoload=True,autoload_with=engine)
stmt=select([fund.columns.account_code,fund.columns.description,fund.columns.nat_balance,rate.columns.date_applied,fund.columns.journal_ctrl_num,rate.columns.journal_ctrl_num])
stmt=stmt.where(and_(rate.columns.journal_ctrl_num==fund.columns.journal_ctrl_num,fund.columns.account_code==selected_acc,rate.columns.date_applied==convert))
results=connection.execute(stmt)
sio = StringIO()
df = pd.DataFrame(data=list(results), columns=results.keys())
####dowload excel file##########
excel_file = IO()
xlwriter = pd.ExcelWriter(excel_file, engine='xlsxwriter')
df.to_excel(xlwriter, 'sheetname')
xlwriter.save()
xlwriter.close()
excel_file.seek(0)
response = HttpResponse(excel_file.read(), content_type='application/ms-excel vnd.openxmlformats-officedocument.spreadsheetml.sheet')
# set the file name in the Content-Disposition header
response['Content-Disposition'] = 'attachment; filename=myfile.xls'
return response
On Tue, Apr 17, 2018 at 1:40 PM, Gerardo Palazuelos Guerrero <gerardo.palazuelos@gmail.com> wrote:
This is my routine to generate excel file:This is something optional I did. I extracted my database connection from the simple py file:Content of my requirements.txt:hi,I don´t have this github, so let me try to show you what I do.
Sorry if I´m not applying best practices, but this is working on my side; I run this manually from cmd in Windows 10 (no django on this).et-xmlfile==1.0.1jdcal==1.3openpyxl==2.5.1pyodbc==4.0.22import pyodbcclass connection:conn = Nonedef get_connection(self):self.conn = pyodbc.connect(r'DRIVER={ODBC Driver 13 for SQL Server};'r'SERVER=<database server name>;'r'DATABASE=<database name>;'r'UID=<database user>;'r'PWD=<user password')return self.connfrom mssqlconnection import connectionimport sysimport openpyxlimport osimport calendarimport timeimport datetimeimport smtplibimport base64cursor = connection().get_connection().cursor() query_to_execute = """the SQL query goes here"""def run_query(start_date, end_date):# executing the query, also I´m passing parameters to my query (dates)cursor.execute(query_to_execute, (start_date, end_date)) # load columns into a listcolumns = [column[0] for column in cursor.description]#print(columns)dir_path = os.path.dirname(os.path.realpath( __file__))print("file to be saved in following directory: %s" % dir_path)os.chdir(dir_path)wb = openpyxl.Workbook()sheet = wb["Sheet"] # default sheet to be renamednew_sheet_name = "CustomSheetName"sheet.title = new_sheet_namerows = cursor.fetchall()tmpRows = 1tmpColumns = 0# save the columns names on first rowfor column in columns:tmpColumns += 1sheet.cell(row = tmpRows, column = tmpColumns).value = column# save rows, iterate over each and every row# this process is fast, for my surprisefor row in rows:tmpRows += 1tmpColumns = 0for column in columns:tmpColumns += 1sheet.cell(row = tmpRows, column = tmpColumns).value = str(getattr(row,column))excel_file_name = "myfilenamegoeshere.xlsx"full_path = "%s\\%s" % (dir_path, excel_file_name)wb.save(excel_file_name)cursor.close()write_log("excel file created with the following filename: %s" % excel_file_name)After Excel file is generated, I´m sending it by email.I hopes that helps.Gerardo.----Gerardo Palazuelos GuerreroOn Mon, Apr 16, 2018 at 6:50 PM, sum abiut <suabiut@gmail.com> wrote:To view this discussion on the web visit https://groups.google.com/d/msThanks Larry,How to i pass my query parameter to the xlsxwriter.CheersOn Tue, Apr 17, 2018 at 1:42 AM, Larry Martell <larry.martell@gmail.com> wrote:I use xlsxwriter and I do it like this:
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
# write file
output.seek(0)
response = HttpResponse(output.read(),
content_type='application/ms-excel')
response['Content-Disposition'] = "attachment; filename=%s" % xls_name
return response
> --
On Mon, Apr 16, 2018 at 2:05 AM, sum abiut <suabiut@gmail.com> wrote:
> my code actually worked. I thought it was going to save the excel file to
> 'C:\excel' folder so i was looking for the file in the folder but i couldn't
> find the excel file. The excel file was actually exported to my django
> project folder instead.
>
> How to i allow the end user to be able to download the file to their desktop
> instead of exporting it to the server itself
>
>
>
> On Mon, Apr 16, 2018 at 3:27 PM, sum abiut <suabiut@gmail.com> wrote:
>>
>> I wrote a function to export sql query to an excel file, but some how the
>> excel file wasn't created when the function was call. appreciate any
>> assistances
>>
>> here is my view.py
>>
>> def download_excel(request):
>> if "selectdate" in request.POST:
>> if "selectaccount" in request.POST:
>> selected_date = request.POST["selectdate"]
>> selected_acc = request.POST["selectaccount"]
>> if selected_date==selected_date:
>> if selected_acc==selected_acc:
>> convert=datetime.datetime.strptime(selected_date,
>> "%Y-%m-%d").toordinal()
>>
>> engine=create_engine('mssql+pymssql://username:password@serv ername /db')
>> connection = engine.connect()
>> metadata=MetaData()
>>
>> fund=Table('gltrxdet',metadata,autoload=True,autoload_with=e ngine)
>>
>> rate=Table('gltrx_all',metadata,autoload=True,autoload_with= engine)
>>
>> stmt=select([fund.columns.account_code,fund.columns.descript ion,fund.columns.nat_balance,f und.columns.rate_type_home,rat e.columns.date_applied,rate. columns.date_entered,fund. columns.journal_ctrl_num,rate. columns.journal_ctrl_num])
>>
>> stmt=stmt.where(and_(rate.columns.journal_ctrl_num==fund.col umns.journal_ctrl_num,fund.col umns.account_code==selected_ acc,rate.columns.date_entered= =convert))
>>
>> df = pd.read_sql(stmt,connection)
>>
>> writer = pd.ExcelWriter('C:\excel\export.xls')
>> df.to_excel(writer, sheet_name ='bar')
>> writer.save()
>>
>>
>
>
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to django-users+unsubscribe@googlegroups.com .
> To post to this group, send email to django-users@googlegroups.com.
> Visit this group at https://groups.google.com/group/django-users .
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAPCf-y75oSOh .thBTv8JjhCjEoZHy1_TC7dn%3DKwG% 3D8GGqjwPA3Q%40mail.gmail.com
> For more options, visit https://groups.google.com/d/optout .
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com .
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CACwCsY5O0pfH .kkXCd430fe6nO%2B0pJgedqtkXoMov ropRUnqfUg%40mail.gmail.com
For more options, visit https://groups.google.com/d/optout .
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com .
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .gid/django-users/CAPCf-y67FZ4p .8igDdSQzyzSVdnx9UVO6aRW07UROfz 2hAgeycA%40mail.gmail.com
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com .
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/ .CAJ8iCyOysSnbNggtyaTVpPwthuUA_ 6ELKpii6pi-HC6kQ7okjA%40mail. gmail.com
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAPCf-y49pLT2WhpzKFgAanAna2RuftHnR91-MLhVOLyFmQM6zQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment