In top of views files (views.py) you must put:
import openpyxl
from openpyxl import Workbook
from openpyxl.styles import Alignment,Border,Font,PatternFill,Side
from openpyxl.styles import colors
from openpyxl.styles import Font, Color,Fill
from openpyxl.styles.borders import BORDER_THIN
from openpyxl.drawing.image import Image as XLIMG

...and the view which prepare the excel out, you should review this example:

# CARTOLA DE RECAUDACION en excel
@login_required(login_url='login_ini')
def acsv(request):
nom_arch = nombrearch() # Se forma string para nombre de archivo excel
string_nombre = 'pac'+nom_arch
query = Pauta_aux.objects.all().order_by('rut') # viene filtrada x rango de 
fecha

reg_x = 0
if query:
for fech_x in query:
reg_x = reg_x + 1
else:
# estas dos instrucciones van juntas siempre
messages.error(request, "No existen movimientos que mostrar !!")
return redirect("info")

mes_x = fechapautas.strftime('%m') 
ano_x = fechapautas.strftime('%Y') 
fecha_ini = str(ano_x)+"-"+str(mes_x).zfill(2)+"-01 00:00:00"
#total dias del mes
totdias = calendar.monthrange(int(ano_x),int(mes_x))[1] 
fecha_fin = str(ano_x)+"-"+str(mes_x).zfill(2)+"-"+str(totdias)+" 00:00:00"
wb = Workbook()
ws = wb.create_sheet("hoja1",0)
ws.column_dimensions['A'].width = 5
ws.column_dimensions['B'].width = 12 # rut paciente
ws.column_dimensions['C'].width = 36 # nombre paciente
ws.column_dimensions['D'].width = 17 # fecha
ws.column_dimensions['E'].width = 11 # rut cuid.
ws.column_dimensions['F'].width = 23 # nombre cuidador
ws.column_dimensions['G'].width = 12 # tipo cuidador
ws.column_dimensions['H'].width = 11 # rut cuid.
ws.column_dimensions['I'].width = 23 # nombre cuidador
ws.column_dimensions['J'].width = 12 # tipo cuidador
ws.column_dimensions['K'].width = 11 # rut cuid.
ws.column_dimensions['L'].width = 23 # nombre cuidador
ws.column_dimensions['M'].width = 12 # tipo cuidador

ws.column_dimensions['Q'].width = 12 # rut cuid.
ws.column_dimensions['R'].width = 14# nombre cuidador
ws.column_dimensions['S'].width = 12 # tipo cuidador
ws.column_dimensions['T'].width = 14 # tipo cuidador

r=4 # posicion de la primera fila
ws.cell(row=r-3,column=2).value = "CARTOLA DE RECAUDACION"
ws.cell(row=r-3,column=7).value = "1=Contratado"
ws.cell(row=r-2,column=7).value = "2=Extra"

ws.cell(row=r-3,column=20).value = "1=Normal"
ws.cell(row=r-2,column=20).value = "2=Domingo"
ws.cell(row=r-1,column=20).value = "3=Festivo"

ws.cell(row=r,column=2).value = "Rut paciente"
ws.cell(row=r,column=3).value = "Paciente"
ws.cell(row=r,column=4).value = "Fecha pauta"

ws.cell(row=r,column=5).value = "Rut turno 1"
ws.cell(row=r,column=6).value = "Cuidador t1"
ws.cell(row=r,column=7).value = "Tipo Cuid t1"

ws.cell(row=r,column=8).value = "Rut turno 2"
ws.cell(row=r,column=9).value = "Cuidador t2"
ws.cell(row=r,column=10).value = "Tipo Cuid t2"

ws.cell(row=r,column=11).value = "Rut turno 3"
ws.cell(row=r,column=12).value = "Cuidador t3"
ws.cell(row=r,column=13).value = "Tipo Cuid t3"

ws.cell(row=r,column=14).value = "$ turno 1"
ws.cell(row=r,column=15).value = "$ turno 2"
ws.cell(row=r,column=16).value = "$ turno 3"

ws.cell(row=r,column=17).value = "$ paciente t1"
ws.cell(row=r,column=18).value = "$ paciente t2"
ws.cell(row=r,column=19).value = "$ paciente t3"

ws.cell(row=r,column=20).value = "recargo"
ws.cell(row=r,column=21).value = "Tot.turnos"
cell_range = ws['B1':'T4']
#cell_range.bold = True

tot1=0 # valores de cuidador
tot2=0
tot3=0
tot_pac1 = 0 # valores de paciente (o lo que pagael apoderado)
tot_pac2 = 0 # valores de paciente (o lo que pagael apoderado)
tot_pac3 = 0 # valores de paciente (o lo que pagael apoderado)
va1=0
va2=0
va3=0

tRecauda = 0
subtot = 0
rut_x = ''
r=r+1
for q in query: # pauta_aux - dia a dia
if q.rut != rut_x:
ws.cell(row=r,column=20).value = "Subtotal:" 
ws.cell(row=r,column=21).value = subtot

r=r+1
ws.cell(row=r,column=20).value = "Tot.Anticipo:"
totAnticipo = anticipos(rut_x,fecha_ini,fecha_fin)

ws.cell(row=r,column=21).value = totAnticipo

r=r+1
ws.cell(row=r,column=20).value = "Recauda:"
ws.cell(row=r,column=21).value = subtot - totAnticipo

tRecauda = 0
subtot = 0

va1=0
va2=0
va3=0

rut_x = q.rut # paciente
r=r+2

ws.cell(row=r,column=2).value = q.rut 
ws.cell(row=r,column=3).value = q.paciente 
ws.cell(row=r,column=4).value = q.fecha   # fecha de la pauta 

ws.cell(row=r,column=5).value = q.rut_t1   # rut cuidador
ws.cell(row=r,column=6).value = q.turno1 # nombre cuidador
ws.cell(row=r,column=7).value = q.tipo_turno1 # Contratado - Extra

ws.cell(row=r,column=8).value = q.rut_t2   # rut cuidador
ws.cell(row=r,column=9).value = q.turno2 # nombre cuidador
ws.cell(row=r,column=10).value = q.tipo_turno2 # Contratado - Extra

ws.cell(row=r,column=11).value = q.rut_t3   # rut cuidador
ws.cell(row=r,column=12).value = q.turno3   # nombre cuidador
ws.cell(row=r,column=13).value = q.tipo_turno3 # Contratado - Extra

ws.cell(row=r,column=14).value = q.valor_t1 # valor cuidador1
ws.cell(row=r,column=15).value = q.valor_t2 # valor cuidador2
ws.cell(row=r,column=16).value = q.valor_t3 # valor cuidador3

ws.cell(row=r,column=17).value = q.valor_p1 # valor paciente
ws.cell(row=r,column=18).value = q.valor_p2 # valor paciente
ws.cell(row=r,column=19).value = q.valor_p3 # valor paciente
#con recargo
if q.reca_cui != '1':
if q.valor_p1 != None:
ws.cell(row=r,column=17).value = q.valor_p1 * 1.5
if q.valor_p2 != None:
ws.cell(row=r,column=18).value = q.valor_p2 * 1.5
if q.valor_p3 != None:
ws.cell(row=r,column=19).value = q.valor_p3 * 1.5

if q.valor_p1 != None:
va1 = q.valor_p1
if q.valor_p2 != None:
va2 = q.valor_p2
if q.valor_p3 != None:
va3 = q.valor_p3
#con recargo 
if q.reca_cui != '1': 
if q.valor_p1 != None:
va1 = q.valor_p1 * 1.5
if q.valor_p2 != None:
va2 = q.valor_p2  * 1.5
if q.valor_p3 != None:
va3 = q.valor_p3 * 1.5

ws.cell(row=r,column=21).value = va1 + va2 + va3 
subtot = subtot + va1 + va2 + va3
if q.valor_t1 != None:
tot1 = tot1 + q.valor_t1
if q.valor_p1 != None:
tot_pac1 = tot_pac1 + q.valor_p1

if q.valor_t2 != None: 
tot2 = tot2 + q.valor_t2
if q.valor_p2 != None: 
tot_pac2 = tot_pac2 + q.valor_p2

if q.valor_t3 != None: 
tot3 = tot3 + q.valor_t3
if q.valor_p3 != None: 
tot_pac3 = tot_pac3 + q.valor_p3

ws.cell(row=r,column=20).value = q.reca_cui # recargo cuidador

r=r+1  # contador defilas  

ws.cell(row=r,column=20).value = "Subtotal:" 
ws.cell(row=r,column=21).value = subtot
r=r+1
ws.cell(row=r,column=20).value = "Tot.Anticipo:"


totAnticipo = anticipos(rut_x,fecha_ini,fecha_fin)

ws.cell(row=r,column=21).value = totAnticipo

r=r+1
ws.cell(row=r,column=20).value = "Recauda:"
ws.cell(row=r,column=21).value = subtot - totAnticipo 
tRecauda = 0
#rut_x = q.rut
r=r+1

ws.delete_rows(5, 4) # elimina la fila 5, y mas 3 hacia abajo

response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; 
filename='+string_nombre+'.xlsx'
wb.save(response)
return response

This is running in production well now, but if there is another way to do 
this, please write me to: gabrielaraya2011<arroba>gmail.com
El lunes, 25 de enero de 2021 a las 6:26:18 UTC-3, [email protected] 
escribió:

> Hello Everyone,
> I have a python file which I run on the terminal and give me the result 
> that I want. I want to to do the same via a web app whereby instead of 
> interacting with the terminal, I can do that via a browser through a form. 
> I have decided to choose django as the server. Below is the file that I 
> need to integrate to django. It works well in the terminal. I also have the 
> excel file.
> Now my concern was how can I integrate it with django such that fields 
> like link_name can be filed through a form and when I click a button 
> should give the required results. Thank you fo your time.
>
> def find_fault(request):
> wb = xl.load_workbook("Find Fault App Documentation.xlsx")
> link_name = input("Link Name: ")
> test_location = input("Test Location: ")
> distance = float(input("Distance of Fault(km): "))
> error = int(input("Error margin(m): "))
> nature = input("Nature of Fault: ").lower()
> for sheet in wb.worksheets:
> if sheet.title == link_name:
> for i in range(2, sheet.max_row + 1):
> cell0 = sheet.cell(i, 1)
> if cell0.value == test_location:
> distance1 = distance * 1000 + sheet.cell(i, 2).value
> for value in range(2, sheet.max_row + 1):
> cell = sheet.cell(value, 2)
> cell1 = sheet.cell(value, 1)
> cell2 = sheet.cell(value, 3)
> if cell.value in range(int(distance1) - error, int(distance1) + error):
> if nature == "kink":
> print()
> print("Kink at {cell1.value}")
> print("Pairs at this point:")
> print(cell2.value)
> elif nature == "break":
> print()
> print("Break at {cell1.value}")
> print("Pairs at this point:")
> print(cell2.value)
> else:
> print()
> print("Fault at {cell1.value}")
> print("Pairs at this point:")
> print(cell2.value)
>
> for value in range(2, sheet.max_row):
> cell1 = sheet.cell(value, 2)
> cell2 = sheet.cell(value + 1, 2)
> cell3 = sheet.cell(value, 4)
> cell4 = sheet.cell(value, 1)
>
> if distance1 in range(cell1.value, cell2.value):
> if distance1 in range(cell1.value + error, cell2.value - error):
> if nature == "kink":
> print()
> print("Kink at {(distance1 - cell1.value) / 1000} "
> "km from {cell4.value}")
> print(
> "Pair at this point >> {cell3.value}")
> elif nature == "break":
> print()
> print("Break at {(distance1 - cell1.value) / 1000} "
> "km from {cell4.value}")
> print(
> "Pair at this point >> {cell3.value}")
> else:
> print()
> print("Fault at {(distance1 - cell1.value) / 1000} "
> "km from {cell4.value}")
> print(
> "Pair at this point >> {cell3.value}")
>
> if distance * 1000 > (sheet.cell(sheet.max_row, 2).value - (sheet.cell(i, 
> 2).value + error)):
> print()
> print(
> "The Distance from {test_location} to {sheet.cell(sheet.max_row, 
> 1).value} ")
> print("is about "
> "{(sheet.cell(sheet.max_row, 2).value - sheet.cell(i, 2).value) / 1000} km
> ")
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/93c1a65c-eaa1-4580-9937-7d85f7e49a63n%40googlegroups.com.

Reply via email to