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.
Nous avons analysé la partie problématique et constaté qu'elle ne pouvait pas être ouverte pour les deux raisons suivantes.
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.
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,
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