[PYTHON] Modèles dans lesquels les fichiers générés par OpenPyXl ne peuvent pas être ouverts dans Excel et leurs contre-mesures

Lorsque je produis un certain journal dans un fichier xlsx avec OpenPyXl et que je l'ouvre dans Excel 2011 sur Mac, la boîte de dialogue suivante apparaît. J'ai fait.

スクリーンショット 2015-12-10 10.42.11.png

Nous avons analysé la partie problématique et constaté qu'elle ne pouvait pas être ouverte pour les deux raisons suivantes.

  1. Il y a un pictogramme mobile dans la cellule
  2. Les cellules numériques commencent par «=» (demi-largeur égale)

Mesures de pictogrammes mobiles

Les pictogrammes mobiles (U + E000-U + F8FF, très vaguement) passeront OpenPyXl lui-même sans aucun problème et un fichier xlsx sera généré. Cependant, Excel ne semble pas supposer que ces caractères invisibles seront écrits tels qu'ils sont dans le fichier, et l'erreur ci-dessus se produira et la conversion de caractères (?) Sera effectuée. Si vous lisez un fichier tsv ou copiez-collez-le dans une cellule, il semble qu'il sera converti par Excel à ce stade et les caractères convertis seront stockés dans la cellule.

Dans ce travail, je suis content d'avoir gratté les choses qui ne peuvent pas être affichées, alors je les ai grattées ci-dessous.

invalid_code = re.compile(ur'[\u0000-\u001F\u007f\uE000-\uF8FF]')
invalid_code.sub('', s)

En fait, c'est «\ uE000- \ uF8FF» qui prend en charge les pictogrammes mobiles. \ u0000- \ u001F \ u007f est un caractère de contrôle, mais il est inclus car OpenPyXl ne le transmet pas. (Mis à part le problème de savoir ce qu'un journal contient de tels caractères) De plus, s est une chaîne de caractères Unicode.

Mesures égales

Comme les pictogrammes, il semble qu'Excel considère les nombres et le début de «=» comme une erreur. (Je pense que s'il s'agit d'une formule, elle devrait être dans la cellule de la formule) Et, par défaut, OpenPyXl écrit dans la cellule sous forme de nombre ([Méfiez-vous de la définition du texte des valeurs de cellule commençant par "=".](Https :: //bitbucket.org/openpyxl/openpyxl/issues/442)), il semble donc qu'Excel lève toujours une erreur.

En guise de contre-mesure,

  1. Convertir en une cellule de chaîne
  2. Mettez un '(guillemet simple) au début de la cellule

Il y en a, et cette fois j'ai choisi le premier.

ws.cell('A1').data_type = 's'

Avec ce qui précède, le fichier généré peut être ouvert sans aucune erreur. S'il y a d'autres modèles, j'aimerais les réécrire.

Recommended Posts

Modèles dans lesquels les fichiers générés par OpenPyXl ne peuvent pas être ouverts dans Excel et leurs contre-mesures
La feuille Excel ne peut pas être spécifiée avec nom_feuille de pd.read_excel
Traiter l'erreur selon laquelle une erreur de récupération HTTP se produit dans gpg et la clé ne peut pas être obtenue