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 13 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
详解python之协程gevent模块
Jun 14 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
django最快程序开发流程详解
Jul 19 Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 Python
python的faker库用法
Nov 28 Python
Python使用xlrd实现读取合并单元格
Jul 09 Python
python从PDF中提取数据的示例
Oct 30 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 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
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
js 处理URL实用技巧
2010/11/23 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
python urllib和urllib3知识点总结
2021/02/08 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
客户经理竞聘演讲稿
2014/05/15 职场文书
环保标语大全
2014/06/12 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
学校体育节班级口号
2015/12/25 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python