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