if cell.value != 'None': AttributeError: 'str' object has no attribute 'value'
时间: 2023-11-10 08:06:01 浏览: 250
这个错误提示是因为你在一个字符串对象上调用了 `value` 属性,而字符串对象并没有这个属性。这个错误通常出现在使用类似于 openpyxl 这样的库读取 Excel 文件时,当读取到空单元格时,返回的是一个字符串类型的 'None',而不是 Python 内置的 NoneType 类型。
为了避免这个错误,你可以在读取单元格的值之前,先判断该单元格是否为空,例如:
```python
if cell.value is not None:
# do something with cell value
```
相关问题
import openpyxl # 打开 Excel 文件 data = openpyxl.load_workbook('cal.xlsx') rtable wtable.append([str(cell.value) if cell.value is not None else '' for cell in row]) AttributeError: 'str' object has no attribute 'append' = data.active # 创建新的 Excel 文件 wbook = openpyxl.Workbook() wtable = wbook.active.title = 'sheet1' count = 0 keyword = "叛徒" # 遍历每一行数据 for row in rtable.iter_rows(min_row=1, max_col=65, max_row=rtable.max_row): # 检查是否包含关键字 if any(keyword in str(cell.value) for cell in row): # 检查是否是空行 if all(cell.value == None for cell in row): continue # 复制该行数据到新的表格中 wtable.append([str(cell.value) if cell.value is not None else '' for cell in row]) count += 1 print(count) # 保存新表格 wbook.save('clh.xlsx')
这段代码的问题在于在创建新的 Excel 文件后,将它的标题(title)赋值给了一个字符串变量,而不是工作表对象。因此,在后续的代码中,将该字符串变量传递给了“append”方法,导致了这个错误。你可以将代码修改为以下形式:
```
# 创建新的 Excel 文件
wbook = openpyxl.Workbook()
wtable = wbook.active
wtable.title = 'sheet1'
count = 0
keyword = "叛徒"
# 遍历每一行数据
for row in rtable.iter_rows(min_row=1, max_col=65, max_row=rtable.max_row):
# 检查是否包含关键字
if any(keyword in str(cell.value) for cell in row):
# 检查是否是空行
if all(cell.value == None for cell in row):
continue
# 复制该行数据到新的表格中
wtable.append([str(cell.value) if cell.value is not None else '' for cell in row])
count += 1
print(count)
# 保存新表格
wbook.save('clh.xlsx')
```
这样修改后,应该就可以正常运行了。
if cell is not None and cell.data_type == 'f': AttributeError: 'int' object has no attribute 'data_type'
非常抱歉,我的回答有误。在openpyxl中,单元格对象的属性不是`data_type`,而是`data_type`。所以代码应该修改为:
```
# 显示第一个工作表的内容
for row in self.record_sheet.iter_rows(min_row=2, values_only=True):
row_values = []
for cell in row:
if cell is not None and cell.data_type == 'f':
row_values.append(cell.value)
else:
row_values.append(cell if cell is not None else "")
if all(not bool(cell) for cell in row_values):
continue
treeview1.insert("", tk.END, values=row_values)
```
这样,就可以避免将公式显示在表格中了。
阅读全文