Mar-10-2021, 02:17 PM
Hello,
I'm writing a Python script which creates an Excel file. The worksheet that causes me problems is the one with a calendar of each month. I would like to have the week number above the days of each week. I already generated that, but I would like to merge the week number cells.
Does anyone know if there is a fonction for that ?
Here is the code that generates the worksheet.
Manon
I'm writing a Python script which creates an Excel file. The worksheet that causes me problems is the one with a calendar of each month. I would like to have the week number above the days of each week. I already generated that, but I would like to merge the week number cells.
Does anyone know if there is a fonction for that ?
Here is the code that generates the worksheet.
import xlsxwriter
import calendar
import datetime
import time
import locale
import pandas as pd
def calendrier(year,mnth):
cal= calendar.Calendar()
temp=cal.monthdatescalendar(year, mnth)
datesMois=[]
for w in temp:
for d in w:
if d.month==mnth:
datesMois.append(d)
locale.setlocale(locale.LC_ALL, "")
nomMois=datetime.datetime.strptime(str(mnth), "%m").strftime("%B")
#locale.setlocale(locale.getdefaultlocale())
return datesMois,nomMois
annee=2021
for m in range(1,13):
exec("dates"+str(m)+",nom"+str(m)+"=calendrier(annee,m)")
workbook = xlsxwriter.Workbook('essai.xlsx')
merge_format = workbook.add_format({ # format jours de la semaine
'align': 'center',
'bold': 1,
'valign': 'vcenter'})
date_format=workbook.add_format({ # format date
'align': 'center',
'bold': 1,
'num_format':'dd/mm/yy',
'valign': 'vcenter'})
date_formatTDB=workbook.add_format({ # format Date dans le tableau de bord (format minimaliste)
'align': 'center',
'num_format':'dd',
'valign': 'vcenter'})
# ajout de la feuille "Tableau de bord"
tdb=workbook.add_worksheet('Tableau de bord')
l=1
for m in range(1,13):
# dd=1
# ld=[]
# exec("for d in dates"+str(m)+":\n\tif d.strftime('%a')=='dim.':\n\t\tld.append(dd+1)\n\tdd+=1")
# print(ld)
# exec("tdb.merge_range('B"+str(l)+":Z"+str(l)+"', nom"+str(m)+", merge_format)")
# exec("tdb.merge_range(l,ld[0],l,ld[1],dates"+str(m)+"[ld[1]].strftime('%V'),merge_format)")
exec("for cmp in range(1,len(dates"+str(m)+")+1):\n\ttdb.write(l,cmp, dates"+str(m)+"[cmp-1].strftime('%V'), date_formatTDB)")
# exec("for j in range(1,len(ld)-1):\n\tprint(j)\n\ttdb.merge_range(l,ld[j],l,ld[j+1],dates"+str(m)+"[ld[j]].strftime('%V'),merge_format)")
exec("for cmp in range(1,len(dates"+str(m)+")+1):\n\ttdb.write(l+1,cmp, dates"+str(m)+"[cmp-1].strftime('%a'), date_formatTDB)")
exec("for cmp in range(1,len(dates"+str(m)+")+1):\n\ttdb.write(l+2,cmp, dates"+str(m)+"[cmp-1], date_formatTDB)")
l+=22
workbook.close()Thanks in advance,Manon
