查看原文
其他

VBA、Python批量删除审定明细表外的其他工作表

思源审计 思源审计
2024-08-28

今天某个项目做后期的同事问我拿审计底稿的Excel版审定表,明细表,或者有时候评估机构也会问我们审计师拿相关会计科目的审定表、明细表,这时候我们通常会手工一个个打开Excel底稿并删除不相关工作表,科目多的话会比较繁琐。思源君经过一番试验,分别用Vba、Python实现了这个功能,假设你的审计Excel底稿中,审定表、明细表分别为第1、第2张Sheet,其他底稿从第3张Sheet开始


Vba代码如下(假设test.xlsm为VBA代码所在表格):

Sub 批量删除指定工作表()Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim pathn$pathn = ThisWorkbook.Pathf = Dir(pathn & "\")Do While f <> ""If f <> "test.xlsm" ThenWorkbooks.Open (pathn & "\" & f)    If Worksheets.Count >= 3 Then        For i = Worksheets.Count To 3 Step -1            Worksheets(i).Delete        Next    End IfActiveWorkbook.Close True End If f = Dir()LoopApplication.DisplayAlerts = TrueApplication.ScreenUpdating = TrueEnd Sub


Python代码如下:

import osimport xlwings as xwfile_path=r'底稿' #给出文件所在的路径文件夹名file_list=os.listdir(file_path)  #列出路径下所有文件和文件夹的名称app=xw.App(visible=False)for i in file_list:    old_file_path=os.path.join(file_path,i)    workbook=app.books.open(old_file_path)    worksheets=workbook.sheets    b=[] #声明一个空的列表存放工作表名称    for sheet in worksheets:        b.append(sheet.name)    for j in range(len(worksheets)):  #range从0开始计数       target_name=str(b[j])        if j>1:           worksheets[target_name].delete()    #一开始想通过数字序号来实现删除特定工作表功能,发现一直报错,改用工作表名称来进行定位删除        else:            continue    workbook.save() #保存工作薄app.quit() #退出程序



End
「思源审计」专属学习群已正式成立,扫描下方二维码添加思源君的个人微信,拉您入群交流学习。

感谢您阅读“思源审计”,如有点滴收获,请点击下方链接关注

继续滑动看下一个
思源审计
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存