Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Generar Archivos Excel desde Oracle con Python
#1
Hola

buenas tardes, soy nuevo en este foro no entiendo mucho como funciona espero no haberme equivocado

tengo una situación al generar archivos Excel con Python

Estoy iniciando con Python, me conecto a Oracle usando la librería xlsxwriter genero archivos Excel, lo que deseo es generar varios archivos según existan id_rep, Ejemplo si en la tabla existen hasta cinco ID_REP con un F realizo 5 vueltas para generar cinco archivo departamento_1.xlsx...departamento_2.xlsx..... hasta 5, El PROBLEMA es que solo me genera un archivo el de la ID_DEP=1, agradecería si me pudieran ayudar la verdad estoy algo perdido

Gracias


Código Python:
cont=0
for i in range(5):
cont = cont + 1
sql="""select id_dep,nombre_dep,total from td_productividad where id_rep=""" str(cont) + """ order by id_dep"""
cursor.execute(sql)
workbook = xlsxwriter.Workbook('E:\archivo\departamento_'"" + str(cont) + ""'.xlsx')
worksheet = workbook.add_worksheet('Departamento_PROD')
    row = 1
    col = 0
 
    worksheet.write(0,0,"ID_DEP")
    worksheet.write(0,1,"DEPARTAMENTO")
    worksheet.write(0,2,"TOTAL")
    rows = cursor.fetchall()

for r in rows:
        worksheet.write(row,col,r[0])
        worksheet.write(row,col+1,r[1])
        worksheet.write(row,col+2,r[2])


row +=1
workbook.close() 
Responder
#2
Hola, bienvenido.

Supongo que al pegar el código aquí en el foro se habrá desconfigurado la sangría. Según lo que comentás, debería verse así:

Código:
cont=0
for i in range(5):
    cont = cont + 1
    sql="""select id_dep,nombre_dep,total from td_productividad where id_rep=""" + str(cont) + """ order by id_dep"""
    cursor.execute(sql)
    workbook = xlsxwriter.Workbook('E:\archivo\departamento_'"" + str(cont) + ""'.xlsx')
    worksheet = workbook.add_worksheet('Departamento_PROD')
    row = 1
    col = 0
    worksheet.write(0,0,"ID_DEP")
    worksheet.write(0,1,"DEPARTAMENTO")
    worksheet.write(0,2,"TOTAL")
    rows = cursor.fetchall()
    for r in rows:
        worksheet.write(row,col,r[0])
        worksheet.write(row,col+1,r[1])
        worksheet.write(row,col+2,r[2])
        row +=1
    workbook.close()

Si este es efectivamente tu código, en principio no veo ningún error, eso debería generar cinco archivos, de departamento_1.xlsx a departamento_5.xlsx. ¿Solo te está generando el primero? ¿Estás obteniendo algún error?

Saludos
Responder
#3
Hola Francisco!

gracias por la bienvenida y la respuesta

no marca ningún error , hice una prueba cambiando lo siguiente:

en el For i in range(1,5): para que diera 5 vueltas y imprimí la variable "cont" lo que veo es que primero entra al for hace del 1 al 5 imprime del 1,2,3,4,5 y luego pasa al SQL y como el ultimo que imprimió es el 5 es el que le envía al parámetro del SQL y solo genera un solo archivo de la ID_REP=5 (departamento_5.xlsx), si alguien sabe como se puede hacer para que por cada vuelta del for se genere un archivo de excel,  agradezco mucho su ayuda

Código:
cont=0
for i in range(5):
    cont = cont + 1
    sql="""select id_dep,nombre_dep,total from td_productividad where id_rep=""" + str(cont) + """ order by id_dep"""
    cursor.execute(sql)
    workbook = xlsxwriter.Workbook('E:\archivo\departamento_'"" + str(cont) + ""'.xlsx')
    worksheet = workbook.add_worksheet('Departamento_PROD')
    row = 1
    col = 0
    worksheet.write(0,0,"ID_DEP")
    worksheet.write(0,1,"DEPARTAMENTO")
    worksheet.write(0,2,"TOTAL")
    rows = cursor.fetchall()
    for r in rows:
        worksheet.write(row,col,r[0])
        worksheet.write(row,col+1,r[1])
        worksheet.write(row,col+2,r[2])
        row +=1
    workbook.close()
Responder
#4
Seguramente tenés un problema con la sangría (los espacios antes de cada línea). Asegurate de que todo el código esté del bucle, como te comenté en el mensaje anterior. Si solo crea el departamento_5.xlsx, es porque el código te está quedando fuera del bucle.

Avisame cómo te fue. Si seguís con problemas, por favor adjuntá una captura de pantalla de tu código.

Saludos
Responder
#5
Hola Francisco

Te doy las gracias por la ayuda,  eso de ser nuevo en esto del Python como que no me imaginaba que tan importante era la sangría, tenias razón era problemas de sangría y siguiendo el orden que tu le diste al código y unos cambios que tuve que hacer ya funciono a la perfección, de nuevo muchas gracias

Saludos
Responder
#6
¡De nada! Efectivamente el hecho de que en Python la sangría influya en el comportamiento del código (a diferencia de casi cualquier otro lenguaje de programación) puede ser un poco confuso al comienzo. Me alegro de que lo hayas podido solucionar.

Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)