Python Openpyxl 库读取 Excel 数据并计算 - 解决 TypeError: unsupported operand type(s) for -: 'NoneType' and 'int' 错误
下面是一个使用 openpyxl 库读取 xlsx 文件中的数据,并进行计算的示例代码:
import openpyxl
import numpy as np
# 读取xlsx文件
wb = openpyxl.load_workbook('data.xlsx')
sheet = wb.active
# 读取A2到C1764的数据
data = []
for row in sheet.iter_rows(min_row=2, max_row=1764, min_col=1, max_col=3):
data.append([cell.value for cell in row])
# 输入一个三维坐标和一个三维向量
input_coord = np.array([1, 2, 3])
input_vector = np.array([4, 5, 6])
# 计算输入坐标到读取坐标间的单位方向向量
unit_direction_vectors = []
for coord in data:
direction_vec = (np.array(coord) - input_coord) / np.linalg.norm(np.array(coord) - input_coord)
unit_direction_vectors.append(direction_vec)
# 计算输入向量在各个读取坐标点处的单位方向向量
input_unit_direction_vectors = []
for coord in data:
direction_vec = input_vector / np.linalg.norm(input_vector)
input_unit_direction_vectors.append(direction_vec)
# 计算以上两个单位方向向量的角平分向量
angle_bisectors = []
for i in range(len(data)):
angle_bisector = (unit_direction_vectors[i] + input_unit_direction_vectors[i]) / np.linalg.norm(unit_direction_vectors[i] + input_unit_direction_vectors[i])
angle_bisectors.append(angle_bisector)
# 打印结果
print('输入坐标到读取坐标间的单位方向向量:')
for vec in unit_direction_vectors:
print(vec)
print('输入向量在各个读取坐标点处的单位方向向量:')
for vec in input_unit_direction_vectors:
print(vec)
print('以上两个单位方向向量的角平分向量:')
for vec in angle_bisectors:
print(vec)
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int' 的解决方法
这个错误通常是由于读取的单元格中存在空值(NoneType)导致的。你可以在读取数据时进行判断,如果单元格的值为 None,则将其跳过。修改代码如下:
# 读取A2到C1764的数据
data = []
for row in sheet.iter_rows(min_row=2, max_row=1764, min_col=1, max_col=3):
row_data = [cell.value for cell in row]
if None not in row_data:
data.append(row_data)
这样可以避免将空值包含在计算中。
原文地址: https://www.cveoy.top/t/topic/otst 著作权归作者所有。请勿转载和采集!