ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 700|回复: 3

[分享] VBA板块的求助,Python解决方案,根据物料号汇总求和

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-2 13:40 | 显示全部楼层 |阅读模式
根据到货记录表中的物料信息,按物料编码去重,求和在本表汇总表中得出物料编码,名称,规格,厂商,单位,到货数量的汇总到本表中。
用数组+字典按在到货记录中按物料号去重汇总求和到汇总表中。
# @Version: 1.0
# @Author : 汤灏
# @File   : delivery_aggregate1.0.py
# @Time   : 2024/2/2 11:21
from functools import reduce

import numpy as np
import openpyxl
import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows

df = pd.read_excel('到货模板.xlsx', sheet_name='到货记录')
# print(df)

temp_df = (
    df.groupby(['物料编码', '物料名称', '厂商', '规格型号/图号', '单位','货位'], as_index=False).agg(
        到货数量汇总=('到货数量', 'sum'))
)
# temp_df.insert(5, '需求数量', None)

df_demand = pd.read_excel('到货模板.xlsx', sheet_name='BOM清单')
df_demand_agg=(
    df_demand.groupby('物料编码',as_index=False).agg(需求汇总=('需求数量','sum'))
)
# print(df_demand_agg)

df_dispatch=pd.read_excel('到货模板.xlsx',sheet_name='发出记录')
df_dispatch_agg=(
df_dispatch.groupby('物料编码',as_index=False).agg(发出总数=('发出数量','sum'))
)
# print(df_dispatch_agg)

df_merged = reduce(lambda left, right: pd.merge(left, right, on=['物料编码'],how='outer'), [temp_df,df_dispatch_agg,df_demand_agg])
print(df_merged)

df_merged=df_merged.assign(欠料数量=df_merged['到货数量汇总'].sub(df_merged['需求汇总'],fill_value=0),
                           库存数量=df_merged['到货数量汇总'].sub(df_merged['发出总数'],fill_value=0),
                           预警=np.where(df_merged['发出总数']>df_merged['需求汇总'],'预警', None)
                           )
print(df_merged)
print(df_merged.columns)

col=['物料编码', '物料名称', '厂商', '规格型号/图号', '单位', '需求汇总', '到货数量汇总', '欠料数量', '发出总数', '库存数量', '预警', '所用机型', '货位']
df_merged=df_merged.reindex(columns=col)
print(df_merged)


wb = openpyxl.load_workbook('到货模板.xlsx')
ws = wb['汇总']
for idx, rows in enumerate(dataframe_to_rows(df_merged, header=False, index=False), start=4):
    for col_idx, cell in enumerate(rows, start=2):
        ws.cell(idx, col_idx, value=cell)

wb.save('zhuan1.xlsx')
PixPin_2024-02-02_13-23-50.png

到货模板0201.rar

43.17 KB, 下载次数: 62

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-27 19:17 | 显示全部楼层
谢谢,学习了。不错。

TA的精华主题

TA的得分主题

发表于 2024-6-3 08:16 | 显示全部楼层
哪位老师知道, 如果EXCEL随意增加列,PYTHon代码还会有效么

TA的精华主题

TA的得分主题

发表于 2024-6-6 08:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
额..........  代码放在哪儿? 怎么使用? 没入门问一下
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 16:46 , Processed in 0.040218 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表