PS:不是网上其他有些弄得那个什么
pypiwin32
那个依赖pywin32 就是再封装了一层,也没有文档,使用说明等,而且在实际的代码调用中。
import win32com.client as win32
// 这里实际是通过pywin32作为python与win32com api接口的桥梁
不使用python自带的一些操作excel的库是因为这次的项目对excel格式要求比较高,要求修改后的excel表格里的公式,特殊符号都不能变,要保留,所以选择使用 win32com模块来对excel进行操作处理。
参见我的另一篇博客
简单测试一下,看是否可以达到要求/期望。 参考 用win32com对Excel追加,修改数据,直接套到自己的excel表格中,格式及特殊字符确实没变,只影响了要改的特定行列的那些单元格,其余完全不变,o( ̄▽ ̄)d
这里存在一个问题,win32com使用必须要求电脑上安装有excel。尝试了wps(校园版),报错。搜索后发现其实这和注册表中DCOM组件对象的写入有关(类似电脑中默认打开excel文件的应用程序是哪个)
根据python win32com 操作wps Excel的注意事项,不同的wps版本使用的调用方式不一样,所以卸载校园版wps重新安装正式版wps
pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
win32com.client.Dispatch("et.Application")
win32com.client.Dispatch("ket.Application")
win32com.client.Dispatch("EXCEL.Application")
不知道如何查看wps版本的,以WPS 2019为例,打开WPS首页,点击“设置”—>“关于WPS”,即可查看版本信息。

失败 此种操作无效
pywintypes.com_error: (-2147417851, '服务器出现意外情况。', None, None)
网上可以找到的资料都是:操作matlab的读取excel时候遇到的
读写excel数据出现服务器出现意外

由于电脑上没有office 只有wps 在 wps的com加载项中没有找到福昕阅读器相关的东西,卸载了福昕阅读器,无效。
搜索过程中看到 VBA操作wps相关字眼,所以去搜索 VBA插件for wps 安装(我是wps2020 所以需要使用vba for wps 7.0版本),这样就可以启用wps的宏。 安装之后依然无效。
pywintypes.com_error: (-2147352567, '发生意外 解决方案 :出现在Python调用WPS中
看到这个人的博客,所以
kwps=win32.Dispatch('kwps.Application')
kwps.Workbooks.open('16-FLUKE8845.xls')
AttributeError: '<win32com.gen_py.Upgrade Kingsoft WPS 3.0 Object Library (Beta)._Application instance at 0x1866059667464>' object has no attribute 'Workbooks'
安装了office,但是安装顺序是(office2013 wps 然后卸载office2013 然后wps没动,然后再安装office2016),调用时,采用office的调用方式,但是报错仍然是与wps相关
import win32com.client as win32
excel = win32.Dispatch('Excel.Application')
wb = excel.Workbooks.open("./16-FLUKE8845.xls")
AttributeError: '<win32com.gen_py.Upgrade WPS Spreadsheets 3.0 Object Library (Beta)._Application instance at 0x2102370556680>' object has no attribute 'WorkBooks'
// Workbooks 严格区分大小写 应该是 Workbooks 不是 大写B 改为之后报错
AttributeError: '<win32com.gen_py.Upgrade WPS Spreadsheets 3.0 Object Library (Beta).Workbooks instance at 0x1915943788616>' object has no attribute 'open'
搜索到如下内容,基本都是c#调用wps相关的东西
另,附上wps自己的接口文档
后来,动了动脑子,终于不再无脑百度了。直接进入WPS开放平台看文档才是正途啊。
本人工作环境一个win10笔记本 一个win7台式机。两个机子由于wps版本,wps与office安装顺序不同。一个调用win32com 调的是 wps 另一个调的则是 office。。。很诡异。
wps官方的接口文档-https://open.wps.cn/docs/office
office官方的接口文档- https://docs.microsoft.com/en-us/office/vba/api/excel.workbook
遇到有问题的地方,是 instance 就去查 对象。 是 attribute 就查 属性
特别注意:无论是使用python调用wps还是office,本质都是调用其中的VBA接口,这时候传递的路径一定要是 绝对路径,而不是相对路径。不然会报错,找不到文件。
wps文档重点关注:

office文档重点关注
Excel->Object model->Application object

对比(对同一个excel表做简单的读写修改,最后保存):
import win32com.client as win32
excel = win32.Dispatch('ket.Application')
wb = excel.Workbooks.Open("XXXXXXX/16-FLUKE8845.xls")
ws = wb.Worksheets('Sheet1')
c_column = [11,21,31,41]
xing=10
ws.Range('C'+str(xing)).Value = c_column[0]
ws.Range('D'+str(xing)).Value = c_column[1]
ws.Range('E'+str(xing)).Value = c_column[2]
ws.Range('F'+str(xing)).Value = c_column[3]
wb.Save
excel = win32.Dispatch('Excel.Application')
wb = excel.Workbooks.open("路径.xlsx")
ws = wb.Worksheets('表')
c_column = [1,2,3,4]
xing=10
ws.Range('C'+str(xing)).value = c_column[0]
ws.Range('D'+str(xing)).value = c_column[1]
ws.Range('E'+str(xing)).value = c_column[2]
ws.Range('F'+str(xing)).value = c_column[3]
wb.save
可以看到 wps和office调用时的两个区别:
- Open函数的大小写,以及
- value属性的大小写
- 大概是wps为了和office做区分吧,刚好Python本身是大小写敏感的语言
相关参考:
背景介绍支持库pypiwin32中含有win32com模块,安装(这个 pypiwin32没有github项目,主页:pypiwin32。> pip install pypiwin32 // 我是使用这种最简单的方式安装完成的> python -m pip install pypiwin32// 可能有些安装不成 需要用这种方式 或者> pip install pypiwin32 --user不使用python自带的一些操作excel的库是因为这次的项目对excel格式要求
#!/usr/bin/python
from win32com.client import Dispatch
xlApp = Dispatch('Excel.Application')
xlApp.Visible = True
xlApp.Workbooks.Add()
xlApp.Worksheets.Add()
程序运行结果:
我用的Excel版本默认打开的时候只有一个Sheet页,通过以上操作后打开的时候出现了两个She
本文中所有的测试都是在Python 3.8.5的环境中进行实现的,IDE为Pycharm
引用的库主要是Pywin32,通过该库直接调用WPS提供的开发API,因此必须在计算机上安装WPS,迁移时记得在目标主机上安装需要的依赖库(当然也可以直接打包成exe)
由于这种方式直接就是操纵WPS,因此完全可以用一样的方式去调用Excel,但需要根据Office官方提供的二次开发库做一小部分修改(迁.
pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Kingsoft WPS', '文档保存失败。', '', 3011, -2147467259), None)
这是一个在调用其他程序时python报的错误
是在WPS中出的错,但是其他程序也可以借鉴
import win32com.client
from win32com.client import Dispatch
xlApp=win32com.client.Dispatch(Excel.Application) # 创建Excel程序
xlWb=xlApp.Workbooks.Add() # 新建工作簿
xlWsh=xlWb.Worksheets.Add() # 创建工作表
xlWsh.Name=MySheet # 为工作表取名
xlRng=xlWsh.Range(A1:D5
<br />其实……从COM接口调用的话,非常简单。举个例子:<br /> <br />环境准备:Windows系统,Python+PyWin32(我推荐 ActivePython ,一站搞定),WPS。<br /> <br />建立如下文件 hello.py:<br /> <br />import win32com.client
o = win32com.client.Dispatch("wps.application")
o.Visible=True
doc = o.Documents.Add()
wps = win32com.client.Dispatch("Kwps.Application") #注意此处是Kwps, 并且注意大写。
wps.Visible = True/False #操作文件是否可见
#新建wps文字
mywps = wps.Documents.Add() #注意是Documents,不是Documen
python 3.5 win10
报错内容:pywintypes.com_error:(-2147417851, ‘…’)
不知道报错的是晒意思,于是查找sf找到解决方案:import win32api
e_msg = win32api.FormatMessage(-2147417851)
print(e_msg)这次真的让我意识到python自带的包,都好神奇啊,而我一直还处于学习python