web-dev-qa-db-fra.com

Format de nombre de paramètres Openpyxl

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.

29
Renesis

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'
42
qryckbosch

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' 
7
Renesis

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.

0
Bijou Smith