win32com 调用 office 程序处理不同的文件

今天小白再带大家探讨 Python 处理 Excel 文件时,遇到的一些问题。

在 Python 中,有几个常用的库专门用来处理 Excel 文件,分别是 xlrd、xlwt 和 openpyxl,简单介绍一下:
* xlrd 只能读取数据,可以处理 xls 和 xlsx;
* xlwt 只能写数据,只能处理 xls;
* openpyxl 可以读数据和写数据,但只能处理 xlsx;
如果待处理的文件,既有 xls,又有 xlsx 时,我觉得还是将它们一并转换为统一格式,再进行二次修改,显得更为方便。
同时,这里还有一种 Excel 文件,就是 xlsm 格式,该表格文件却很少被其他库支持。这种情况下,如果我们电脑有安装微软的 Excel 软件(非 wps),就可以通过调用本地 excel 软件对表格文件进行格式转换,然后我们再进行其它操作。

再给代码之前,我仍然给大家讲述一些知识点,方便大家一读就会。

那处理 Excel 文档,这里就需要调用 Excel 程序了;
在 Python 中,文档用 Documents 表示,工作簿用 Workbooks 表示,因此处理不同的文件,我们需要调用不同的属性,打开对应的文件;

# 调用word程序
WordApp = win32com.client.Dispatch("Word.Application")
# 调用excel程序
WordApp = win32com.client.Dispatch("Excel.Application")

# 打开word文档
w.Documents.Open(path)
# 打开Excel工作簿
w.Workbooks.Open(path)

# 后台运行,不显示,不警告
WordApp.Visible = 0
WordApp.DisplayAlerts = 0

Excel 文件的格式是最多的,这里我再给大家做一个总结,给你加深一下印象。
win32com 调用 office 程序处理不同的文件

这里需要强调一下:后面的代码里,我们在使用 SaveAs 保存时,会用到一个 FileFormat 属性,其中:
FileFormat=51,表示 xlsx 扩展文件;
FileFormat=56,表示 xls 扩展文件;
FileFormat=52,表示 xlsm 扩展文件;
FileFormat=23,表示 csv 扩展文件;

好了,前期准备知识讲述完毕,这里直接给大家上代码。

import os
import time
import win32com
from win32com.client import Dispatch

def xls_xlsx(path):
   w = win32com.client.Dispatch('Excel.Application')
   w.Visible = 0
   w.DisplayAlerts = 0
   wb = w.Workbooks.Open(path)
   # 这里必须要绝对地址,保持和xls路径一致
   newpath = allpath+'\\转换后的文档.xlsx'

   wb.SaveAs(newpath,FileFormat = 51)
   # doc.Close() 开启则会删掉原来的dxls
   w.Quit()# 退出
   return newpath
allpath = os.getcwd()
print(allpath)
xls_xlsx(allpath+'\\转换前的文档.xls')

最终结果:
win32com 调用 office 程序处理不同的文件