Python使用pandas操作Excel无法向指定单元格写入值如何解决
错误原因分析
- 写法1(attempt1)错误:
ufo.loc[ufo['BARCODE'] == barcode ,'STOCK']是pandas返回的DataFrame切片/值,不是openpyxl识别的「单元格坐标格式(如C4这类)」,无法直接作为ws[]的参数定位单元格,自然赋值失败。同时你代码里使用了load_workbook但没有导入对应的openpyxl库,运行会直接报错。 - 写法2(attempt2)错误:你确实用pandas修改了内存里的
ufoDataFrame对象,但后续没有把修改后的ufo回写到Excel文件里,反而保存了未修改的openpyxl读取的workbook对象,修改完全没有生效。 - 核心问题:你同时混用pandas和openpyxl两个库操作同一个Excel文件,两边内存数据不互通,逻辑冲突。
修正方案
建议选其中一种库实现即可,不要混用。
方案1:纯pandas实现(代码最简洁)
import pandas as pd # 读取Excel df = pd.read_excel('items.xlsx') # 获取用户输入 barcode = input("Enter Barcode: ") stockleft = int(input("Enter How many are Left: ....")) # 库存为数值类型,建议转int避免存为字符串 # 匹配对应行修改STOCK值 df.loc[df['BARCODE'] == barcode, 'STOCK'] = stockleft # 把修改后的DataFrame直接写回Excel,不保留pandas自动生成的索引列 df.to_excel('items.xlsx', index=False)
方案2:纯openpyxl实现
from openpyxl import load_workbook # 读取Excel wb = load_workbook('items.xlsx') ws = wb.active # 获取用户输入 barcode = input("Enter Barcode: ") stockleft = int(input("Enter How many are Left: ....")) # 先定位BARCODE和STOCK对应的列序号 barcode_col = None stock_col = None # 遍历第一行表头匹配列名 for col in range(1, ws.max_column + 1): if ws.cell(row=1, column=col).value == 'BARCODE': barcode_col = col if ws.cell(row=1, column=col).value == 'STOCK': stock_col = col # 遍历行匹配对应barcode if barcode_col and stock_col: for row in range(2, ws.max_row + 1): # 跳过第一行表头,从第二行数据开始遍历 if ws.cell(row=row, column=barcode_col).value == barcode: ws.cell(row=row, column=stock_col).value = stockleft break # 保存修改 wb.save('items.xlsx')
内容的提问来源于stack exchange,提问作者Soilets
相关产品推荐
相关产品推荐

