33

数値形式をセルに適用する例を誰かに見せてください。たとえば、科学的な形式が必要です。フォームは「2.45E + 05」のようになりますが、openpyxlでそれを行う方法がわかりませんでした。

いくつかの方法で試しましたが、ワークブックを保存するときにすべてエラーが報告されています。

例えば:

    import openpyxl as oxl

    wb = oxl.Workbook()
    ws = wb.create_sheet(title='testSheet')
    _cell = ws.cell('A1')
    _cell.style.number_format = '0.00E+00'

またはこれ(ここでは、事前定義された数値形式のいくつかを使用しようとしています。ビルトインにエンジニアリング形式があることも確認しましたが、それにアクセスする方法がわかりません:

    nf = oxl.style.NumberFormat.FORMAT_NUMBER_00
    _cell.style.number_format = nf

どちらの場合も、同じエラーが発生します。

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'

この質問を見たことがあります: Openpyxl でスタイルを設定します が、他の書式設定を変更する必要がないため、役に立ちません。

4

4 に答える 4

53

この回答はopenpyxl 2.0で機能します。(以前に受け入れられた回答はそうではありません。)

number_format直接変更できます。

与えられた例は次のようになります。

from openpyxl import Workbook

wb = Workbook()
ws = wb.create_sheet(title='testSheet')
_cell = ws.cell('A1')
_cell.number_format = '0.00E+00'
于 2014-10-13T07:35:26.723 に答える
9

注:この回答はopenpyxlの以前のバージョンでは機能しましたが、openpyxl 2.0では機能しません

これを行う方法は次のとおりです。

    _cell.style.number_format.format_code = '0.00E+00' 
于 2012-09-13T07:37:19.423 に答える
2

openpyxl バージョン 2.6.2 の場合: float 表示は、python シェル、アイドル、または 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()

MS-Excel、LibreOffice-Calc、または Gnumeric でスプレッドシートを再度開くと、「0.000E+00」形式が正しく表示されるため、がっかりしないでください。ワークブックを保存することを忘れないでください。

于 2019-04-17T07:05:38.540 に答える