誰かが数値形式をセルに適用する例を示してください。たとえば、科学的な形式が必要です。形式は「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でのスタイルの設定 しかし、他のフォーマット設定を変更する必要がないため、役に立ちません。
この回答は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'
注:この回答は以前のバージョンのopenpyxlでは機能しましたが、openpyxl 2.0では機能しません
これを行う方法は次のとおりです。
_cell.style.number_format.format_code = '0.00E+00'
Openpyxlバージョン2.6.2の場合:フロートの表示は、python Shell、またはアイドル、または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」形式が正しく表示されるため、ご安心ください。ブックを保存することを忘れないでください。