吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3479|回复: 10
上一主题 下一主题
收起左侧

[Python 转载] python与vba批量删除excel中多余的sheet表

  [复制链接]
跳转到指定楼层
楼主
人二 发表于 2021-9-9 19:05 回帖奖励
本帖最后由 人二 于 2021-9-9 17:26 编辑

起因

  • 由于工作原因,需要批量处理大量的excel表格,删除表格中多余的sheet表

思路

  1. 可以用vba来做,首选获取活动的sheet名(因为一般关闭都会从有数据那张sheet关闭,当然也可以判定工作簿的单元格是否有内容),对比将不符合的表单进行删除。

  2. 可以用python来做,结果发现openxl不支持读取xls后缀的表格,遂百度找到win32com,结合vba上的知识简直秒变办公达人,vba上的代码摇身一变就能写在python中,就是python中没有提示太恼火了,只有在vba里看看工作簿的属性。

部分代码解释

  1. 代码对比,打开活动sheet表并判断表中是否有值(非第一个sheet表)
        "vba代码"
    Do While myFile <> ""
        If myFile <> ThisWorkbook.Name Then '排除自己
            Workbooks.Open myPath & myFile
            sheetName = ActiveWorkbook.ActiveSheet.Name '获取活动表名
            flag = ActiveSheet.Cells(2, 1).Value '再次判断标志

            If flag <> "" Then
                deleteSheet (sheetName)
            Else
                For Each sht In ActiveWorkbook.Worksheets
                    If Cells(2, 1).Value = "" Then
                        deleteSheet (sht.Name)
                    End If
                Next
            End If
            ActiveWorkbook.Save
            ActiveWorkbook.Close
        End If
        myFile = Dir '下一个文件
    Loop

        "python代码"
        import win32com.client
        from win32com.client import Dispatch

        xlApp = win32com.client.Dispatch('Excel.Application')
    xlBook = xlApp.Workbooks.Open("文件地址") #打开的excel文件
    sheetName = xlBook.ActiveSheet.Name
                       flag = xlBook.ActiveSheet.Cells(2, 1).Value #再次判断标志

               if flag != None:
                    for sht in xlBook.Worksheets:
                         if sht.Name != sheetName:
                              sht.Delete()
               else:
                    for sht in xlBook.Worksheets:
                         if sht.Cells(2, 1).Value == None:
                              sht.Delete()
               xlBook.Save()
               xlBook.Close()
  • 以上代码可以看到vba与python其实对象调用的方法或属性其实差不多,python中主要是调用win32com.client.Dispatch('Excel.Application')来实现与vba代码互通的,当然能看懂源码的大佬可以去深究 (或者你有更多的文档参考资料请告知我,谢谢!)

完整代码下载

  • 见附件,前段时间搞了个500的悬赏缺币啊,求支持!!!

python-vba源文件.rar

14.89 KB, 下载次数: 22, 下载积分: 吾爱币 -1 CB

excel与python源文件

免费评分

参与人数 2吾爱币 +6 热心值 +2 收起 理由
Lucifer_BW + 1 + 1 热心回复!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
leeqng 发表于 2021-9-9 20:53
分享就可以了,还需要买?
3#
 楼主| 人二 发表于 2021-9-9 20:59 |楼主
4#
摸鱼大佬 发表于 2021-9-9 21:50
是否有值逻辑有问题,使用sheets().usedrange  返回为空判断
5#
破解专用户 发表于 2021-9-9 22:27
大神,我昨天百度得一BAT命令
@echo off
net user Administrator XXX
我存成了BAT,双击即可快速设置开机密码,下班了,我想再建一个双击,去掉密码,请问可以完成吗?
最好能指教一下,设置密码时,就自动开启1分钟不动自动锁屏,恢复时显示登陆密码?
第二个BAT,设置密码为空,自动开启X分钟不动自动锁屏,恢复时不需要显示登陆密码!
非常感谢大佬,实在是什么都不会,只是普通的电脑用户……
6#
cyh1993 发表于 2021-9-9 22:45
写习惯了C和php     看见py的代码  就&#129326;
7#
 楼主| 人二 发表于 2021-9-10 08:20 |楼主
摸鱼大佬 发表于 2021-9-9 21:50
是否有值逻辑有问题,使用sheets().usedrange  返回为空判断

你说我的代码吗?测试通过了的
8#
bg_yx 发表于 2021-9-10 08:45
有思路,支持。
9#
wxfy2009 发表于 2021-9-10 08:48
最近刚刚好需要的,多谢了。
10#
Loker 发表于 2021-9-10 09:12
用python没那必要吧,判断单个单元格就可以删除整个sheet吗?
1 引入openpyxl库
2 os遍历文件夹获取全部的excel文件
3 遍历全部的sheet并获取每一个sheet的最大行最大列
4 如果最大行列等于0就删除,保存
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-13 16:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表