You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用pandas操作Excel无法向指定单元格写入值如何解决

错误原因分析
  • 写法1(attempt1)错误:ufo.loc[ufo['BARCODE'] == barcode ,'STOCK'] 是pandas返回的DataFrame切片/值,不是openpyxl识别的「单元格坐标格式(如C4这类)」,无法直接作为ws[]的参数定位单元格,自然赋值失败。同时你代码里使用了load_workbook但没有导入对应的openpyxl库,运行会直接报错。
  • 写法2(attempt2)错误:你确实用pandas修改了内存里的ufo DataFrame对象,但后续没有把修改后的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:24:02