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

基于Python+openpyxl的支出录入算法编写求助

解决方案

核心思路思路

用户输入拆分后会得到[物品1, 价格1, 物品2, 价格2,...]格式的列表,只需成对提取物品和价格,再按行写入Excel的B列(物品)和D列(价格),从第3行开始即可。

完整代码实现

from openpyxl import load_workbook

# 示例用户输入
int_spending = "苹果:10:香蕉:8:牛奶:15"

# 拆分输入字符串
items_prices = int_spending.split(':')

# 校验输入格式是否合法(物品和价格需成对出现)
if len(items_prices) % 2 != 0:
    print("输入格式错误,请按照「物品:价格:物品:价格……」的格式输入")
else:
    # 加载目标Excel工作簿(若文件不存在,可改用Workbook()创建新文件)
    wb = load_workbook("支出记录.xlsx")
    ws = wb.active  # 获取当前活动工作表

    # 循环处理每一组物品和价格,从第3行开始写入
    for idx in range(0, len(items_prices), 2):
        row_num = 3 + (idx // 2)  # 计算当前行号:从第3行起步,每一组数据加1行
        item = items_prices[idx]
        price = items_prices[idx + 1]
        
        # 写入对应单元格:B列存物品,D列存价格
        ws[f"B{row_num}"] = item
        ws[f"D{row_num}"] = price

    # 保存修改后的工作簿
    wb.save("支出记录.xlsx")
    print("数据写入完成")

更简便的成对处理写法

可以用zip配合切片直接分组,代码更简洁:

# 替代上述循环部分的写法
for row_num, (item, price) in enumerate(zip(items_prices[::2], items_prices[1::2]), start=3):
    ws[f"B{row_num}"] = item
    ws[f"D{row_num}"] = price
  • items_prices[::2]:提取所有偶数索引的元素(即所有物品)
  • items_prices[1::2]:提取所有奇数索引的元素(即所有价格)
  • enumerate(..., start=3):直接从第3行开始计数行号,无需手动计算

关键细节说明

  1. 格式校验:先判断拆分后的列表长度是否为偶数,避免用户输入不完整(比如只输了物品没输价格)。
  2. 单元格定位:用f"B{row_num}"的字符串格式化方式,比ws.cell(row=row_num, column=2)更直观(B列对应第2列,D列对应第4列)。
  3. 工作簿操作:如果是新建Excel文件,把load_workbook换成Workbook()即可,记得最后保存。

内容的提问来源于stack exchange,提问作者Fail Exotic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:30:58