Pourrait s'il vous plaît quelqu'un montrer un exemple d'application du format numérique à la cellule. Par exemple, j'ai besoin d'un format scientifique, la forme serait comme '2.45E + 05' mais je ne pouvais pas trouver un moyen de le faire dans openpyxl.
J'ai essayé de plusieurs manières, mais elles signalent toutes des erreurs lors de l'enregistrement du classeur.
par exemple:
import openpyxl as oxl
wb = oxl.Workbook()
ws = wb.create_sheet(title='testSheet')
_cell = ws.cell('A1')
_cell.style.number_format = '0.00E+00'
ou ceci (ici j'essaie d'utiliser certains des formats de nombres prédéfinis, j'ai également vu qu'il y a un format d'ingénierie dans les buildins mais je ne sais pas comment y accéder:
nf = oxl.style.NumberFormat.FORMAT_NUMBER_00
_cell.style.number_format = nf
Dans les deux cas, j'obtiens la même erreur:
C:\Python27\openpyxl\cell.pyc in is_date(self)
408 """
409 return (self.has_style
--> 410 and self.style.number_format.is_date_format()
411 and isinstance(self._value, NUMERIC_TYPES))
AttributeError: 'str' object has no attribute 'is_date_format'
J'ai vu cette question: Définition des styles dans Openpyxl mais cela n'aide pas car je n'ai pas à modifier d'autres paramètres de mise en forme.
Cette réponse fonctionne avec openpyxl 2.0. (La réponse précédemment acceptée ne le fait pas.)
Le number_format
peut être modifié directement.
L'exemple donné devient:
from openpyxl import Workbook
wb = Workbook()
ws = wb.create_sheet(title='testSheet')
_cell = ws.cell('A1')
_cell.number_format = '0.00E+00'
Remarque: cette réponse fonctionnait avec les versions antérieures de openpyxl, mais ne fonctionne pas avec openpyxl 2.
Voici comment faire:
_cell.style.number_format.format_code = '0.00E+00'
Pour openpyxl version 2.6.2: notez que l'affichage flottant dépend de l'amplitude dans une session python Shell, ou inactive, ou ipython,
>>> wb = load_workbook('tmp.xlsx')
>>> ws = wb[wb.sheetnames[0]]
>>> c21 = ws.cell(2,1)
>>> c21.value
'43546'
>>> c21.value = int(c21.value)
>>> c21.value
43546
>>> c21.value = 134352345235253235.235235
>>> c21.number_format = '0.000E+00'
>>> c21.value
1.3435234523525323e+17
>>> c21.value = 534164134.6643
>>> c21.value
534164134.6643
>>> wb.save('tmp_a.xlsx')
>>> wb.close()
Mais ne soyez pas consterné, car le format '0.000E + 00' s'affichera correctement lorsque vous rouvrirez la feuille de calcul avec MS-Excel ou LibreOffice-Calc ou Gnumeric. N'oubliez pas de sauvegarder le classeur.