Python+Xlwings 删除Excel的行和列


Posted in Python onDecember 19, 2020

一、需求:

某公司管理的多个资管计划每天生成A表,业务人员需手工打开每个A表,将某些行、列删除后方可打印上报。

现拟采用程序代替手工操作。

二、分析:

1、应在原始文件的副本上操作,因此需拷贝文件夹内所有Excel至目标目录;

解答:使用shutil.copy()

2、需打开excel并删除指定的行和列;

解答:openpyxl不支持xls格式,xlwt无法删除行和列,最终选择xlwings;

三、代码实现:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 
"""
 
@Time    : 2019-12-27 17:16
@Author  : Peanut_C
@FileName: excel_converter.py
 
"""
 
 
import os
import shutil
import xlwings as xw
 
current_dir = os.getcwd()
src_dir = os.path.join(current_dir, 'src_dir')
dst_dir = os.path.join(current_dir, 'dst_dir')
exist_list = ['YYYY', 'XXXX']  # 要保留行的A列关键字
 
 
def file_copy(source_dir, destination_dir):
    os.chdir(source_dir)
    for file in os.listdir(source_dir):
        shutil.copy(file, destination_dir)
    print('INFO ===>>> 文件拷贝完成!')
 
 
def excel_modifier(wk_dir):
    os.chdir(wk_dir)
    for file in os.listdir(wk_dir):
        # 检查文件格式是否为xls
        # print(type(os.path.splitext(file)[1]))
        if os.path.splitext(file)[1] != '.xls':
            print(file, '===>>>文件格式不正确,请检查!')
        else:
            print('开始处理===>>>', file)
            # 创建app,打开工作表
            app = xw.App(visible=False, add_book=False)
            app.screen_updating = False
            app.display_alerts = False
            load_wb = app.books.open(file)
            load_ws = load_wb.sheets.active
            print('\t已打开工作表……')
 
            # 获取总行数(列数固定不需要获取)
            rows = load_ws.api.UsedRange.Rows.count
            # cols = load_ws.api.UsedRange.Columns.count
 
            # 获取需要处理的A列范围
            a_range = load_ws.range('A1:A'+str(rows-4))  # 得到range对象
 
            # 将range中每行对象存放到列表中并倒序
            print('\t开始获取标志列……')
            cell_list = []
            for cell in a_range:
                cell_list.append(cell)
            cell_list.reverse()
            # print(cell_list)
 
            # 将表头拆分、重新合并,为插入的值腾地方
            print('\t开始调整合并单元格……')
            load_ws.range('H3:J3').api.unmerge()  # 拆分单元格
            load_ws.range('H3:I3').api.merge()  # 合并单元格
            load_ws.range('J3').value = 'xxx'  # 插入值
 
            # 设定将A列每个值与要保留列表比对,比对不上则删除整行
            print('\t开始调整行和列……')
            for cell in cell_list:
                if cell.value is not None:  # 单元格不为空则开始比对
                    find_flag = 0  # 匹配标志
                    for exist_value in exist_list:
                        if cell.value.find(exist_value) != -1:
                            find_flag = 1  # 匹配则将标志置为1
                            break  # 一个单元格只要匹配就不再比对保留列表剩下的值
                        else:
                            continue  # 匹配不上则继续
                    if find_flag == 0:  # 没匹配上的删除整行
                        cell_to_del = cell.address
                        # print(cell_to_del)
                        load_ws.range(cell_to_del).api.EntireRow.Delete()
                else:  # 单元格为空直接删除
                    cell_to_del = cell.address
                    # print(cell_to_del)
                    load_ws.range(cell_to_del).api.EntireRow.Delete()
 
            # 处理列,将指定列从大到小删除(避免先删除小列导致后续列号变动)
            load_ws.api.columns('K').delete
            load_ws.api.columns('G').delete
            load_ws.api.columns('B').delete
            # 美化处理后的Excel
            print('\t开始美化表格……')
            load_ws.range('A1:H24').columns.autofit()
            # 处理完毕,保存、关闭、退出Excel
            load_wb.save()
            load_wb.close()
            app.quit()
            print('处理完毕===>>>', file, '\n\n')
 
 
if __name__ == '__main__':
    file_copy(src_dir, dst_dir)
    excel_modifier(dst_dir)
    print('任务结束,请至dst_dir目录查看文件!\n\n')
    os.system('pause')

四、运行情况:

脚本测试完毕后,使用pyinstaller -F excel_converter.py -i icon.ico打包成为exe文件。

将可执行程序拷贝至业务人员电脑可直接执行,原始文件拖入src_dir,处理后文件输出至dst_dir。

经测试excel2013使用正常,excel2007无法连接。

Python+Xlwings 删除Excel的行和列

以上就是Python+Xlwings 删除Excel的行和列的详细内容,更多关于python 删除Excel的行和列的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python 文件和路径操作函数小结
Nov 23 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
Python标准库sched模块使用指南
Jul 06 Python
Python实现统计代码行的方法分析
Jul 12 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
Keras Convolution1D与Convolution2D区别说明
May 22 Python
Python如何获取文件路径/目录
Sep 22 Python
python scrapy简单模拟登录的代码分析
Jul 21 Python
python Zmail模块简介与使用示例
Dec 19 #Python
python中实现栈的三种方法
Dec 19 #Python
python中实现词云图的示例
Dec 19 #Python
python 实现图片批量压缩的示例
Dec 18 #Python
python 基于opencv实现高斯平滑
Dec 18 #Python
python爬取代理ip的示例
Dec 18 #Python
用Python 执行cmd命令
Dec 18 #Python
You might like
在PHP中使用灵巧的体系结构
2006/10/09 PHP
基于php缓存的详解
2013/05/15 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
强制设为首页代码
2006/06/19 Javascript
javascript一些不错的函数脚本代码
2008/09/10 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
Python ldap实现登录实例代码
2016/09/30 Python
Python全栈之列表数据类型详解
2019/10/01 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Django models filter筛选条件详解
2020/03/16 Python
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
护士自荐信范文
2013/12/15 职场文书
党校学习自我鉴定
2014/02/24 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
2014年保洁工作总结
2014/11/24 职场文书
清明节寄语2015
2015/03/23 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
如何做好工作总结!
2019/04/10 职场文书
python缺失值填充方法示例代码
2022/12/24 Python