使用Python +运算符结合openpyxl修改Excel单元格数值的相关问题
问题解答
问题1解答
要使用+运算符对Excel已有数值运算并读取更新后的值,需按以下规则操作:
- 若要修改已有Excel文件,需使用
openpyxl.load_workbook()方法加载本地文件,不要每次新建空白工作簿,否则原有数据会被覆盖 - 读取单元格内容时必须取
.value属性,直接通过sheet["单元格位置"]获取到的是单元格对象,而非单元格存储的数值 - 运算完成后重新赋值给对应单元格的
.value属性,保存文件后再次读取即可拿到更新后的值
问题2解答
不需要对整列追加值,可以直接对指定单元格的现有值使用+运算符修改,只要先正确读取到该单元格的现有数值,运算后写回对应单元格即可。
现有代码问题梳理
- 每次调用函数都会新建空白工作簿,A2、B2单元格默认无值,
x、y拿到的是空单元格对象,无法直接和整数相加 - 没有调用
.value属性获取单元格存储的数值,直接用单元格对象和整数运算会触发类型错误 - openpyxl不支持将工作簿保存为
.csv格式,该库仅支持处理.xlsx格式的Excel文件,如需生成csv需要使用Python内置的csv模块 - 导入语句建议放在代码顶部,不要放在函数内部
修正后代码
以下代码支持首次运行新建文件初始化数值,后续运行自动叠加已有数值:
from openpyxl import Workbook, load_workbook import os def add(): file_path = "hey.xlsx" # 文件存在就加载本地文件,不存在则新建并初始化 if os.path.exists(file_path): workbook = load_workbook(file_path) sheet = workbook.active else: workbook = Workbook() sheet = workbook.active # 新建文件时初始化表头和A2、B2初始值 sheet["A1"] = 'Marginal Social Benefit' sheet["B1"] = 'Marginal Social Cost' sheet["A2"] = 0 sheet["B2"] = 0 # 读取单元格存储的数值 x = sheet["A2"].value y = sheet["B2"].value vad = int(input()) vid = int(input()) # 运算后写回单元格 sheet["A2"].value = x + vad sheet["B2"].value = y + vid # 保存为xlsx格式文件 workbook.save(filename=file_path) # 可直接打印验证更新后的值 print(f"A2更新后数值:{sheet['A2'].value}") print(f"B2更新后数值:{sheet['B2'].value}") add()
内容的提问来源于stack exchange,提问作者Frederik N. Pedersen
相关产品推荐
相关产品推荐

