我試圖從Excel表格中拉出單元格值,與他們進行數學運算,並將輸出結果寫入新工作表。我不斷收到ErrorType。我成功之前已經運行的代碼,但只是增加了它的這一方面,因此代碼已被蒸餾如下:Openpyxl:操縱單元格值
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消息:
first = ws.cell(row=x+y, column=1).value)/100
TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'
我想這是指在ws.cell值和100,分別,所以我也試着:
first = int(ws.cell(row=x, column=1))/100 #also tried with float
這就提出:
TypeError: int() argument must be a string or a number
我已確認列中的每個單元格都只由數字組成。另外,openpyxl的cell.data_type返回'n'(據我所知可以通過文檔推測出數字)。
我也測試過更簡單的數學,並有相同的錯誤。
我所有的搜索似乎都指向openpyxl,通常表現得像這樣。我做錯了什麼,或者這只是模塊的限制嗎?如果是這樣,是否有任何程序化的解決方法?
作爲獎勵,更簡潔地編寫代碼的建議將不勝感激。我剛開始,覺得必須有更清晰的方式來寫出這樣的想法。
的Python 3.3,openpyxl-1.6.2,Windows 7的
摘要
CFI的回答讓我看着辦吧,雖然我使用了一個稍微不同的解決方法。在檢查原始文件時,有一個空單元(我之前錯過了)。由於我將在後面這個碼在列上具有更多空零星細胞中重新使用,我使用:
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
因此,如果指定單元格是空的,它被忽略和跳過。
請始終發佈符合引用錯誤的代碼。 'row = x + r'指代碼中不存在的變量'r'。 – cfi
謝謝,更新了錯誤消息。 – Jonathan