我试图从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