相关文章推荐
朝气蓬勃的桔子  ·  python ...·  11 月前    · 
温文尔雅的茴香  ·  Win32_USBController ...·  1 年前    · 

PS:不是网上其他有些弄得那个什么 pypiwin32 那个依赖pywin32 就是再封装了一层,也没有文档,使用说明等,而且在实际的代码调用中。

import win32com.client as win32
// 这里实际是通过pywin32作为python与win32com api接口的桥梁

不使用python自带的一些操作excel的库是因为这次的项目对excel格式要求比较高,要求修改后的excel表格里的公式,特殊符号都不能变,要保留,所以选择使用 win32com模块来对excel进行操作处理。

参见我的另一篇博客

简单测试一下,看是否可以达到要求/期望。 参考 用win32com对Excel追加,修改数据,直接套到自己的excel表格中,格式及特殊字符确实没变,只影响了要改的特定行列的那些单元格,其余完全不变,o( ̄▽ ̄)d

wps和excel访问的API不同的问题

这里存在一个问题,win32com使用必须要求电脑上安装有excel。尝试了wps(校园版),报错。搜索后发现其实这和注册表中DCOM组件对象的写入有关(类似电脑中默认打开excel文件的应用程序是哪个)

根据python win32com 操作wps Excel的注意事项,不同的wps版本使用的调用方式不一样,所以卸载校园版wps重新安装正式版wps

# 报错信息:
pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
win32com.client.Dispatch("et.Application")#wps正式版
win32com.client.Dispatch("ket.Application")#wps抢先版
win32com.client.Dispatch("EXCEL.Application")#office EXCEL版

不知道如何查看wps版本的,以WPS 2019为例,打开WPS首页,点击“设置”—>“关于WPS”,即可查看版本信息。
img
失败 此种操作无效

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') #需要安装Excel
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
# wps
excel = win32.Dispatch('ket.Application') #需要安装Excel
wb = excel.Workbooks.Open("XXXXXXX/16-FLUKE8845.xls") #文件路径
ws = wb.Worksheets('Sheet1') #具体那张表
c_column = [11,21,31,41] #需要写入的数据
xing=10 # 某一行,这里指第十行S
ws.Range('C'+str(xing)).Value = c_column[0] #这里指对C10写入数据 1
ws.Range('D'+str(xing)).Value = c_column[1] #这里指对D10写入数据 2
ws.Range('E'+str(xing)).Value = c_column[2] #这里指对E10写入数据 3
ws.Range('F'+str(xing)).Value = c_column[3] #这里指对F10写入数据 4
wb.Save #保存表格
# office
excel = win32.Dispatch('Excel.Application') #需要安装Excel
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] #这里指对C10写入数据 1
ws.Range('D'+str(xing)).value = c_column[1] #这里指对D10写入数据 2
ws.Range('E'+str(xing)).value = c_column[2] #这里指对E10写入数据 3
ws.Range('F'+str(xing)).value = c_column[3] #这里指对F10写入数据 4
wb.save #保存表格

可以看到 wps和office调用时的两个区别:

  • Open函数的大小写,以及
  • value属性的大小写
  • 大概是wps为了和office做区分吧,刚好Python本身是大小写敏感的语言

相关参考:

背景介绍支持库pypiwin32中含有win32com模块,安装(这个 pypiwin32没有github项目,主页:pypiwin32。&gt; pip install pypiwin32 // 我是使用这种最简单的方式安装完成的&gt; python -m pip install pypiwin32// 可能有些安装不成 需要用这种方式 或者&gt; 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