Excelシートからセルの値を取得し、それらを計算して、出力を新しいシートに書き込もうとしています。ErrorType を取得し続けます。以前にコードを正常に実行したことがありますが、この側面を追加しただけなので、コードは以下に要約されています。
import openpyxl
#set up ws from file, and ws_out write to new file
def get_data():
first = 0
second = 0
for x in range (1, 1000):
if ws.cell(row=x, column=1).value == 'string':
for y in range (1, 10): #Only need next ten rows after 'string'
ws_out.cell(row=y, column=1).value = ws.cell(row=x+y, column=1).value
second = first #displaces first -> second
first = ws.cell(row=x+y, column=1).value/100 #new value for first
difference = first - second
ws_out.cell(row=x+y+1, column=1).value = difference #add to output
break
TypeError メッセージをスローします。
最初 = ws.cell(row=x+y, column=1).value)/100
TypeError: /: 'NoneType' および 'int' のサポートされていないオペランド型
これはそれぞれ ws.cell 値と 100 を参照していると思いますので、次のことも試しました。
first = int(ws.cell(row=x, column=1))/100 #also tried with float
発生するもの:
TypeError: int() 引数は文字列または数値でなければなりません
列のすべてのセルが数字のみで構成されていることを確認しました。さらに、openpyxl の cell.data_type は「n」を返します (ドキュメントでわかる限り、おそらく番号に対して)。
より単純な数学もテストしましたが、同じエラーが発生しました。
私の検索はすべて、openpyxlが通常このように動作していることを示しているようです。私は何か間違ったことをしていますか、それとも単にモジュールの制限ですか? もしそうなら、プログラムによる回避策はありますか?
おまけとして、コードをより簡潔に書くためのアドバイスをいただければ幸いです。私は始めたばかりで、このようなアイデアを書くためのよりクリーンな方法があるに違いないと感じています。
Python 3.3、openpyxl-1.6.2、Windows 7
概要
少し異なる回避策を使用しましたが、cfiの答えはそれを理解するのに役立ちました。元のファイルを調べると、空のセルが 1 つありました (これは以前に見逃していました)。散発的な空のセルを含む列で後でこのコードを再利用するため、以下を使用しました。
if ws.cell(row=x+r, column=40).data_type == 'n':
second = first #displaces first -> second
first = ws.cell(row=x+y, column=1).value/100 #new value for first
difference = first - second
ws_out.cell(row=x+y+1, column=1).value = difference #add to output
したがって、指定されたセルが空の場合、そのセルは無視され、スキップされました。