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自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 Python
利用python实现xml与数据库读取转换的方法
Jun 17 Python
Python探索之ModelForm代码详解
Oct 26 Python
python实现简单中文词频统计示例
Nov 08 Python
python中字符串内置函数的用法总结
Sep 13 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
python绘制彩虹图
Dec 16 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 Python
python PIL模块的基本使用
Sep 29 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 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
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
利用Python演示数型数据结构的教程
2015/04/03 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python实现的Excel文件读写类
2015/07/30 Python
python制作一个桌面便签软件
2015/08/09 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
Python OS模块实例详解
2019/04/15 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
网络编辑岗位职责
2014/03/18 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
学生个人评语大全
2015/01/04 职场文书
六一儿童节开幕词
2015/01/29 职场文书
撤诉状格式范本
2015/05/19 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书