[PYTHON] Muster, in denen von OpenPyXl generierte Dateien nicht in Excel geöffnet werden können, und ihre Gegenmaßnahmen

Wenn ich ein bestimmtes Protokoll mit OpenPyXl in eine xlsx-Datei ausgeben und es in Excel 2011 auf einem Mac öffnen möchte, wird das folgende Dialogfeld angezeigt. Ich tat.

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

Wir haben den problematischen Teil analysiert und festgestellt, dass er aus den folgenden zwei Gründen nicht geöffnet werden konnte.

  1. In der Zelle befindet sich ein mobiles Piktogramm
  2. Numerische Zellen beginnen mit '=' (halbe Breite gleich)

Mobile Piktogrammmaße

Mobile Piktogramme (U + E000-U + F8FF, sehr locker) passieren OpenPyXl selbst ohne Probleme und es wird eine XLSX-Datei generiert. Excel scheint jedoch nicht davon auszugehen, dass diese unsichtbaren Zeichen so geschrieben werden, wie sie in der Datei enthalten sind, und der obige Fehler auftritt und die Zeichenkonvertierung (?) Durchgeführt wird. Wenn Sie eine tsv-Datei lesen oder kopieren und in eine Zelle einfügen, wird sie anscheinend zu diesem Zeitpunkt von Excel konvertiert und die konvertierten Zeichen werden in der Zelle gespeichert.

Ich bin froh, dass ich in dieser Arbeit die Dinge abgekratzt habe, die nicht angezeigt werden können, also habe ich sie unten abgekratzt.

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

Tatsächlich unterstützt "\ uE000- \ uF8FF" mobile Piktogramme. \ u0000- \ u001F \ u007f ist ein Steuerzeichen, das jedoch enthalten ist, da OpenPyXl es nicht weitergibt. (Abgesehen von dem Problem, was ein Protokoll solche Zeichen enthält) Außerdem ist s eine Unicode-Zeichenfolge.

Gleiche Maßnahmen

Wie bei Piktogrammen scheint Excel Zahlen und den Beginn von '=' als Fehler zu betrachten. (Ich denke, wenn es sich um eine Formel handelt, sollte sie sich in der Zelle der Formel befinden.) Standardmäßig schreibt OpenPyXl als Zahl in die Zelle. //bitbucket.org/openpyxl/openpyxl/issues/442)), also scheint es, dass Excel immer noch einen Fehler auslöst.

Als Gegenmaßnahme

  1. In eine Zeichenfolgenzelle konvertieren
  2. Setzen Sie am Anfang der Zelle ein '(einfaches Anführungszeichen)

Es gibt, und dieses Mal habe ich das erstere gewählt.

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

Mit dem oben genannten kann die generierte Datei ohne Fehler geöffnet werden. Wenn es andere Muster gibt, würde ich sie gerne noch einmal schreiben.

Recommended Posts

Muster, in denen von OpenPyXl generierte Dateien nicht in Excel geöffnet werden können, und ihre Gegenmaßnahmen
Eine Excel-Tabelle kann nicht mit dem Blattnamen pd.read_excel angegeben werden
Behandlung des Fehlers, dass ein HTTP-Abruffehler in gpg auftritt und der Schlüssel nicht abgerufen werden kann