下面是一个使用 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)

这样可以避免将空值包含在计算中。

Python Openpyxl 库读取 Excel 数据并计算 - 解决 TypeError: unsupported operand type(s) for -: 'NoneType' and 'int' 错误

原文地址: https://www.cveoy.top/t/topic/otst 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录