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 相关文章推荐
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
Python简单生成随机数的方法示例
Mar 31 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
python能做什么 python的含义
Oct 12 Python
python之列表推导式的用法
Nov 29 Python
python已协程方式处理任务实现过程
Dec 27 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 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
javascript some()函数用法详解
2014/11/13 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
js 表格隔行颜色
2009/12/02 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
微信小程序实现打卡日历功能
2020/09/21 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
python Django 创建应用过程图示详解
2019/07/29 Python
用django设置session过期时间的方法解析
2019/08/05 Python
python中的itertools的使用详解
2020/01/13 Python
零基础小白多久能学会python
2020/06/22 Python
python 8种必备的gui库
2020/08/27 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
团日活动策划书
2014/02/01 职场文书
技校毕业生自荐信
2014/06/03 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
2015年试用期工作总结
2014/12/12 职场文书
评先进个人材料
2014/12/29 职场文书
满月酒邀请函
2015/01/30 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS