python win32com + VBA宏 操作Excel,清除Excel中的公式

python win32com + VBA宏 操作Excel,清除Excel中的公式

最近有个需求是自动化清楚excel中的公式,尝试了使用openpyxl读取的时候不加载公式,但这样的结果是使用了公式的数据出不来,经过测试发现可以使用win32com,win32com是物理操作的,相当于模拟人工操作,这个工具实在太好用了,还可以截图等一列神操作。
具体代码如下:

def run_vba_code(filepath):
    """:arg
    filepath : 处理的excel文件路径,要绝对路径
    """
    # 获取当前工作目录,这个需要用相对路径
    # base_dir = os.path.dirname(os.path.abspath(__file__))
    # path = os.path.join(base_dir, filename)

    if os.path.exists(filepath): # 判断文件是否存在
        # 清除公式的vba code
        macro_code = '''
        sub VBAMacro()
                Dim sh As Worksheet
            For Each sh In Sheets
                sh.UsedRange = sh.UsedRange.Value
            Next
        End Sub
        '''

        xlsx_app = win32com.client.Dispatch('Excel.Application')
        # Excel 文件是否可见,可测试 True 或者 False 即可
        xlsx_app.Visible = True

        xlsx_book = xlsx_app.Workbooks.Open(filepath)

        # 往excel写入vba code,及运行vba
        xlmodule = xlsx_book.VBProject.VBComponents.Add(1)
        xlmodule.CodeModule.AddFromString(macro_code)
        xlsx_book.Application.Run("VBAMacro")

        # 取消提示窗口,删除数据源sheet,
        xlsx_app.visible = True
        xlsx_app.DisplayAlerts = False

        sheet_name_list = ['数据源01', '数据源02', '数据源03']
        for sheet_name in sheet_name_list:
            try:
                xlsx_book.Worksheets(sheet_name).Delete()
            except:
                print('sheet:“{}” 不存在'.format(sheet_name))
            time.sleep(1)

        """保存、退出、关闭"""
        # 另存为
        # new_path = os.path.join(base_dir, 'xxxx-new.xlsx')
        # xlsx_book.SaveAs(new_path, FileFormat=51)
        xlsx_book.Save()
        xlsx_book.Close()
        xlsx_app.Quit()
        return True

    else:
        print('文件不存在')
        return False

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值