Rendre Excel capable de convertir des fuseaux horaires

Il y a quelques mois au travail, j’ai eu le besoin de rendre Excel capable de prendre en charge la conversion d’une date et d’une heure en un autre fuseau horaire. J’ai donc fait quelques recherches sur Google et j’ai trouvé que la réponse la plus courante était d’ajouter / soustraire des heures. Ce genre de travaux si les deux régions n’utilisent pas l’heure d’été, mais je ne pouvais pas le garantir.

Ensuite, il y a quelques références à la possibilité de convertir de l’heure locale en UTC en utilisant kernel32.DLL. Génial si ce sont les deux zones avec lesquelles vous souhaitez travailler, ou génial si tout est exprimé en décalages de UTC.

Aucun de ceux-ci ne convenait à mon cas d’utilisation. Après avoir été exposé aux merveilleuses bibliothèques dans des choses comme Java, PHP et Python, je voulais pouvoir prendre une heure de date et savoir de quel fuseau horaire il s’agit, convertissez-la en n’importe quel autre fuseau horaire. Je voulais que l’heure d’été soit prise en compte. C’est trop demander?

Alors j’ai pensé, et si vous pouviez exécuter Python dans Excel. Ce problème serait résolu facilement. Eh bien quelques recherches rapides sur Google et j’ai trouvé xl-wings (https://www.xlwings.org/). Comme par hasard, cette petite beauté fonctionne comme annoncé. Vous pouvez en effet exécuter Python à partir d’Excel. Vache sacrée, c’est génial. Non seulement cela fonctionne dans Excel 2003, qui était la version que j’étais coincé à l’époque. Points bonus pour travailler dans un environnement qui n’est pas explicitement répertorié comme étant pris en charge.

J’ai donc suivi les instructions d’installation. Tout s’est passé comme documenté même si j’étais dans Excel 2003 (dark ages je sais). L’exemple d’application a fonctionné comme un régal. C’est donc devenu un exercice de programmation Python. Voici le Python avec lequel je me suis retrouvé.

from datetime import datetime as dt
from dateutil import tz

import xlwings as xw

@xw.func
def convtz(origDate, fromTZName, toTZName):
from_zone = tz.gettz(fromTZName)
to_zone = tz.gettz(toTZName)
tempDate = origDate.replace(tzinfo=from_zone)
return tempDate.astimezone(to_zone)

In Excel you can then use a function such as

convtz(‘7/25/2017 05:59:03 AM’, ‘Europe / Istanbul’, ‘Australie / Melbourne’)

Donc, si vous êtes dans une impasse et que vous avez besoin de convertir entre les fuseaux horaires dans Excel comme je l’ai fait. Peut-être essayer xl-wings et Python.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.