He estado intentando que set_column funcione aún. Al tener problemas para que Pandas funcione, lo he estado haciendo solo en xlsxwriter. En este momento estoy usando: 'worksheet.set_column (' D: D ', None, format4)': esto solo parece funcionar cuando entro en el archivo xlsx y en realidad activo cada celda en la columna "D". ¿Hay alguna forma de activar cada celda para que no tenga que hacerlo manualmente?

Gracias de antemano.

import xlsxwriter,os,sys,datetime
now=datetime.datetime.now()
def main():
    platform=sys.platform
    if platform.find('win')>=0:
        TheSlash='\\'
    else:
        TheSlash='/'
    output = '%s-%s.xlsx' % ('XlsxSample',now.strftime("%m%d%Y-%H%M"))
    workbook = xlsxwriter.Workbook(output, {'strings_to_numbers':True,'default_date_format':'mm/dd/yy hh:mm'})
    worksheet = workbook.add_worksheet()
    count=0
    counter=0
    format=workbook.add_format({'font_size':'8','border':True})
    formatdict={'num_format':'mm/dd/yy hh:mm'}
    format4=workbook.add_format(formatdict)
    cur =('Pole1','33.62283963','-90.54639967','4/20/16 11:43','-90.54640226','33.62116957','5207069','25-04','50','3','PRIMARY','PGC')
    for name in cur:
        worksheet.write(counter, count, name,format)
        count+=1
    counter+=1
    worksheet.set_column('D:D',None,format4)
    workbook.close()
if __name__ == "__main__":
    main()

Como se indicó anteriormente, el formato de fecha solo parece activarse si ingresa a la celda "D" con el cursor.

1
Slihthinden 9 may. 2016 a las 20:53

3 respuestas

La mejor respuesta

La razón por la que el formato de fecha de la columna no se muestra en las celdas de la columna es que el programa lo sobrescribe con un formato de celda aquí:

for name in cur:
    worksheet.write(counter, count, name,format)
    count+=1

En XlsxWriter, como en Excel, un formato de celda anula un formato de columna.

Si desea tener un formato de celda o columna que sea el resultado de 2 formatos combinados, deberá crear un nuevo formato que combine esos formatos y aplicarlo a las celdas o la columna.

Actualización : Además, acabo de notar que está escribiendo una cadena en la columna D. Las fechas en Excel son números formateados. Esta es probablemente la razón por la que ve que cambian los datos de la celda cuando presiona volver. Excel está convirtiendo la cadena tipo fecha en un número formateado que se muestra como una fecha. En XlsxWriter deberás hacer la conversión. Consulte la sección Trabajo con fechas y hora de los documentos de XlsxWriter.

2
jmcnamara 10 may. 2016 a las 19:26

En VBA, Columns("D").Select hace lo que quieres. Si está ejecutando desde un script externo, es posible que pueda guardar una macro VBA y ejecutarla con una técnica como esta: ¿Cómo llamo a una macro de Excel desde Python usando xlwings?.

2
Community 23 may. 2017 a las 12:33

Necesita cambiar el formato usando datetime.datetime.strptime ()

Ejemplo

import datetime
datetime_result = datetime.dateime.strptime('04/20/16 11:43', '%m/%d/%Y %H:%M')
format5 = workbook.add_format({'num_format':'mm/dd/yy hh:mm'})
worksheet.write('A5', datetime_result, format5)

Consulte Trabajar con fechas y hora en documentos de XlsxWriter.

3
Sungjin Kim 28 nov. 2019 a las 08:04