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.
Wir haben den problematischen Teil analysiert und festgestellt, dass er aus den folgenden zwei Gründen nicht geöffnet werden konnte.
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.
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
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