python优化办公(excel)02

功能说明:根据本月的某些行 找到 对应上月的相应行,在比较其某些列的不同,把不同之处标记在本月的某对应列

代码:

import time
startt = time.time()
import win32com.client as win32
import os
import pandas as pd
#获取需要比较的月份的新旧
def get_old_new_excel():
    need_exc = []
    for i in os.listdir():
        if len(i.split('月')[0].split('年')) > 1:
            need_exc.append(i)
    old_month = need_exc[0]
    new_month = need_exc[1]
    if int(need_exc[1].split('月')[0].split('年')[0]) < int(need_exc[0].split('月')[0].split('年')[0]):
        old_month = need_exc[1]
        new_month = need_exc[0]
    elif int(need_exc[1].split('月')[0].split('年')[0]) == int(need_exc[0].split('月')[0].split('年')[0]) and int(need_exc[1].split('月')[0].split('年')[1]) < int(need_exc[0].split('月')[0].split('年')[1]):
        old_month = need_exc[1]
        new_month = need_exc[0]
    return old_month,new_month
# 读取数据
print('pandas正在读取 ',get_old_new_excel()[0],' 和 ',get_old_new_excel()[1],' 的数据\nwaiting.......')
excel_old = pd.DataFrame(pd.read_excel(get_old_new_excel()[0],sheetname='塔类'))
excel_new = pd.DataFrame(pd.read_excel(get_old_new_excel()[1],sheetname='塔类'))
excel = win32.Dispatch('Excel.Application')
excel.Visible = True
# need_col= [17,21,24,51,61,73,77,84,89,99,109,113,117,121,125]
need_col= ['Q','U','Y','AW','BI','BU','BY','CF','CK','CU','DE','DI','DM','DQ','DU','EG']
print('win32com正在读取 ',get_old_new_excel()[0],' 和 ',get_old_new_excel()[1],' 的数据\nwaiting.......')
Excel_old = excel.Workbooks.Open(os.getcwd()+'\\'+ get_old_new_excel()[0])
Excel_new = excel.Workbooks.Open(os.getcwd()+'\\'+ get_old_new_excel()[1])
Excel_old_Sheet = Excel_old.Worksheets('塔类')
Excel_new_Sheet = Excel_new.Worksheets('塔类')
print('读取数据完成,即将比较数据')
#开始比较,先找到需要比较的行 i  ,再与上月的同行 old_index相比较 ,一样则执行操作
for i in excel_new.loc[excel_new['产品服务费与上月相比是否变化'] == '是'].index.tolist(): 
    i = int(i + 2)
    print('正在比较第 ',i,' 行')
    new_b = Excel_new_Sheet.Cells(i,2).value
    old_index = int(excel_old.loc[excel_old['产品业务确认单编号'] == new_b].index.tolist()[0]) + 2
    cha_ju = ''
    for lie in need_col:
        if Excel_new_Sheet.Cells(i,lie).value != Excel_old_Sheet.Cells(old_index,lie).value:
            Excel_new_Sheet.Cells(i,lie).Interior.ColorIndex = 6
            cha_ju = cha_ju + str(lie) + ' '
        else:
            continue
    Excel_new_Sheet.Cells(i,'EB').value = cha_ju
#保存,退出,总结,暂停给用户看
print('比较完成,正在保存并退出....')
Excel_old.save
Excel_old.close
Excel_new.save
Excel_new.close
excel.Visible = 0
stopt = time.time()
print('一共比较 ',len(excel_new.loc[excel_new['产品服务费与上月相比是否变化'] == '是'].index.tolist()),' 行,共花费大约',(stopt - startt)/60,'分钟')
os.system('pause')

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

CSS-in-JS,向Web组件化再迈一大步 | 洞见

简介 CSS-in-JS是什么,看到这个词就能大概猜到是在JavaScript里写CSS,那为什么要在JavaScript里写CSS呢,像之前一样写在css文件...

2978
来自专栏DeveWork

WordPress 开发之使用WordPress 3.8+后台图标(dashicons)

伴随着WordPress 3.8 的新界面,WordPress 官方为后台UI 引进了目前贼流行的webfont(又称 icon font),官方独立项目名为d...

2018
来自专栏全栈数据化营销

不用代码,10分钟会采集微博、微信、知乎、58同城数据和信息

 学会信息和数据快速采集都是非常必要的,因为这能大大提高工作效率。在学会python和火车头之前,web scraper是我最常用的采集工具了,设置简单,非常高...

4909
来自专栏Youngxj

杨小杰工具箱网页源码

1714
来自专栏非著名程序员

精选!5 个必备必知必用的前端插件

IE 不敢说话,猎豹,360 相视对瞄,世界之窗竟然动了脚步,这难道是在跃跃欲试?我靠,竟然是往后退了一步。到时火狐在跃跃欲试。这时,说时迟那时快,Chrome...

8335
来自专栏angularejs学习篇

js鼠标事件

今天遇到一个非常奇怪而又搞笑的事情:给一个a标签添加一个鼠标移动上时给一个事件,我给其添加的是一个onMouseMove事件,结果在IE6 7 8 9和GOOL...

1813
来自专栏大数据钻研

前端面试那些坑之HTML篇

HTML 1、Doctype作用?标准模式与兼容模式各有什么区别? (1)、<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<html> 标签之前...

3989
来自专栏ThoughtWorks

前端不止:Web性能优化 - 关键渲染路径以及优化策略

我问你:“当你从搜索引擎的结果页面选择打开一条搜索结果时,你觉得多长时间之后,如果页面还处于白屏或者没有加载到关键信息,你会选择关掉这个窗口?”

1242
来自专栏IT派

15 个有意思的 JavaScript 和 CSS 库推荐! 你用过几个?

我们在Tutorialzine上的任务就是让你了解最新最酷的Web发展趋势。这就是为什么我们每个月都会发布一些我们偶然发现并认为值得你关注的最佳资源的缘由。

1380
来自专栏强仔仔

利用JQuery实现从底部回到顶部的功能

今天给大家介绍一下如何利用JQuery实现从任意地方返回顶部的功能,现在大部分网站因为篇幅比较长,所以都会设置这么一个按钮,利用这个按钮可以实现从底部返回顶部的...

2577

扫码关注云+社区

领取腾讯云代金券