При создании Excel с помощью Python xlsxwriter форматирование выполняется только после двойного щелчка по ячейке. - PullRequest
1 голос
/ 29 апреля 2019

Я создал скрипт, который создает фрейм данных, который я хотел бы вставить в документ Excel.В приведенном ниже коде я устанавливаю правильные параметры для настройки формата каждого столбца.

Как только Excel был создан, формат будет неправильным в каждой ячейке.Формат становится правильным только после того, как я дважды щелкну по ячейке.

Проверка формата документа Excel показывает, что для каждой строки мой формат был установлен кодом, но не отображался.

Заранее спасибоза любой совет, который может решить эту проблему.

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 30 10:28:45 2019

@author: ny
"""
import logging
import sys
import pyodbc           # Database connector
import pandas as pd     # Data frames 
import datetime         # Dates and time 
from datetime import timedelta 

import numpy as np 



test =  {'col1':['USD'],
         'col2':['USD Fed'],
         'col3':['2019-01-04 15:15:00'],
         'col4':['2019-01-04 15:24:59.999'],
         'col5':['1.13564'],
         'col6':['1.13528'],
         'col7':['1.13845'],
         'col8':['1.137'],
         'col9':['0.002474375682434556'],
         'col10':['0.0015150447466703754'],
         'col11':['-28.10'],
         'col12':['-17.20']}
testdf = pd.DataFrame(data=test)

#results = results.sort_values(by=['TimeStart'], ascending=False)
#Excel

#results = results.applymap(str)

outputString = 'test' + "MarketMovement.xlsx"
writer = pd.ExcelWriter(outputString, engine = 'xlsxwriter')



testdf.to_excel(writer, sheet_name ='Events',index = False)
resultsLn = len(testdf)
Clength = 'A1:L'+str(resultsLn+1)
workbook = writer.book
num_fmt =  workbook.add_format({'num_format': '#,##0.00000'})
day_fmt     =  workbook.add_format({'num_format': 'yyyy-mm-dd hh:mm:ss'})                                 

worksheet = writer.sheets['Events']    


worksheet.add_table(Clength, {'columns': [
  {'header': 'titleCurrency'}#a
 ,{'header': 'Event'}#a
 ,{'header': 'TimeStart'}#a
 ,{'header': 'TimeEnd'}#b
 ,{'header': 't1HighRate'}#c
 ,{'header': 't1LowRate'}#d
 ,{'header': 't10HighRate'}#e
 ,{'header': 't10LowRate'}#f
 ,{'header': 'PercentHighChange'}#g
 ,{'header': 'PercentLowChange'}#h
 ,{'header': 'changeHighPips'}#i
 ,{'header': 'changeLowPips'}#j
 ],
                                   'autofilter': True,
                                   'total_row': False,
                                   'style': 'Table Style Medium 2'})   



worksheet.set_column('A:A', 20)  
worksheet.set_column('B:B', 20)     
worksheet.set_column('C:C', 20, day_fmt)    
worksheet.set_column('D:D',20, day_fmt)
worksheet.set_column('E:E',25, num_fmt)
worksheet.set_column('F:F',25, num_fmt)
worksheet.set_column('G:G',25, num_fmt)
worksheet.set_column('H:H',25, num_fmt)
worksheet.set_column('I:I',25, num_fmt)
worksheet.set_column('J:J',25, num_fmt)
worksheet.set_column('K:K',25, num_fmt)
worksheet.set_column('L:L',25, num_fmt)

writer.save()
writer.close()   

#Clear all kernel after finished 
# import IPython
# app = IPython.Application.instance()
# app.kernel.do_shutdown(True)   

1 Ответ

0 голосов
/ 30 апреля 2019

Решение заключается в том, что мне нужно убедиться, что тип данных полностью совпадает.Необходимо использовать правильный формат даты и времени для Python и числовой для чисел.Решение предоставлено jmcnamara.

...