python合并excel单元格中的相同条件内容
程序员文章站
2022-08-06 20:44:51
每个月都需要做一次将几个供应商的商品汇总,然后发给他们,他们进行开票,一次有好几家供应商,有多有少。所以还是觉得麻烦其中一个单位的供应商就有2000多,每个月都要做公式,也麻烦,所以准备用python来实现import xlwings as xwfrom SpEntity import SpEntityimport xlwings as xwclass SpEntity: def __init__(self,name,shuliang,total): .....
每个月都需要做一次将几个供应商的商品汇总,然后发给他们,他们进行开票,一次有好几家供应商,有多有少。所以还是觉得麻烦
其中一个单位的供应商就有2000多,每个月都要做公式,也麻烦,所以准备用python来实现
import xlwings as xw
from SpEntity import SpEntity
import xlwings as xw
class SpEntity:
def __init__(self,name,shuliang,total):
self.name=name
self.total=total
self.shuliang = shuliang
def gettotal(self):
print(self.danjia);
print(self.shuliang)
return self.total;
def biaoge():
# 获取xlwings实例对象
app = xw.App(visible=True, add_book=False);
# 打开表
workbook = app.books.open("D:\mx.xls");
#选择sheets
sheet = workbook.sheets("应付明细账单");
#最大行数统计
address_all = sheet.used_range.address.split("$")[-1];
#拼接
spzuidahang = "c" + address_all;
print(spzuidahang)
# 获取商品名所在区域的数据
spms = sheet.range("c3:" + spzuidahang);
# 获取数量所在区域的数据
shuliang = sheet.range("e3:" + "e" + address_all);
# 获取总金额所在区域的数据
total = sheet.range("G3:" + "G" + address_all);
#建议一个空字典用来装数据
shangpings = {};
#遍历
for inx, spm in enumerate(spms):
#如果商品名为空,就不在执行了。
if (spm.value is None):
break;
#去除前后空格
tempspm = spm.value.strip();
# 去用名称做Key到字典里查看是否有这个对象
spentity = shangpings.get(tempspm);
#如果不存在
if spentity is None:
#创建对象
tempsp = SpEntity(tempspm,float(shuliang[inx].value),float(total[inx].value));
#以名称做Key,对象做键放到tempsp里
shangpings[tempspm] = tempsp;
#如果存在
else:
#将数量取出来相加
spentity.shuliang = float(spentity.shuliang) + float(shuliang[inx].value);
# 将应付金额取出来相加
spentity.total = float(spentity.total) + float(total[inx].value);
#建议新工作表
hebing = workbook.sheets.add("合并工作表");
# 做为数据添加
sum = 2;
#将A1到C1设置为标题
hebing.range("A1:c1").value = ["商品名", "数量", "金额"];
#遍历字典
for key, itm in shangpings.items():
hebing.range("A" + str(sum)).value = itm.name
hebing.range("B" + str(sum)).value = itm.shuliang;
hebing.range("C" + str(sum)).value = itm.total;
sum += 1;
print(itm.name + "数量" + str(itm.shuliang) + "总价" + str(itm.total))
if __name__ == '__main__':
biaoge();
欢迎各位大神指正
本文地址:https://blog.csdn.net/yyangcr/article/details/109043604