Python使用xlwings操作wps表格的个人心得

因自己的电脑没有装office,在用Python调用xlwings来操作Word文档时总会出现一些奇奇怪怪的错误,查资料发现网上千篇一律都是一样的内容,而且无法解决实质性的问题,于是只能自己琢磨,终于弄出来一个还可以用用的demo

鉴于WPS的API文档实在难以找到,我就直接在这里贴上连接吧,方便后续诸位同学查询:WPS的API跳转链接

1、安装所依赖的库:

pip install xlwings 
pip install win32com

当然如果觉的安装太慢可以使用国内的源,在安装命令后加个 -i 然后接国内源地址就行了

pip install xlwings  -i https://pypi.douban.com/simple/

2、Python国内镜像地址:

1.阿里云:https://mirrors.aliyun.com/pypi/simple/
2.豆瓣:https://pypi.douban.com/simple/
3.清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/(推荐)
4.中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
5.华中理工大学:http://pypi.hustunique.com/
6.山东理工大学:http://pypi.sdutlinux.org/

3、创建 WPS 的 Excel 文档

报错信息:pywintypes.com_error: (-2147221005, ‘无效的类字符串‘, None, None)xlwings报错
解决方法如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 首先当然是先引入对应的包
import os
import xlwings as xw
from win32com.client import Dispatch

def create_excel():
	create_path =./WPS/Excel”				# 所要创建表格的目录地址
	# 为了避免直接修改库自带的源码,就研究了下源码,发现只要引入impl就可以了
    # noinspection PyProtectedMember
    xl = xw._xlwindows.COMRetryObjectWrapper(Dispatch("Ket.Application"))
    # noinspection PyProtectedMember
    impl = xw._xlwindows.App(visible=False, add_book=False, xl=xl)
    
    # 新建一个excel(visible为是否需要可视化,True为可视化,False为后台运行)
    app = xw.App(visible=True, add_book=False, impl=impl)
    BaseWorkBook = app.books.add()
    # 判断路径是否存在
    isExists = os.path.exists(create_path)
    isPath = os.path.isdir(create_path)
    if isExists and isPath:
    	BaseWorkBook.save(create_path + "/Workbook.xlsx")
    else:
    	os.mkdir(create_path)
    	BaseWorkBook.save(create_path + "/Workbook.xlsx")
    return BaseWorkBook

注意:鉴于很多同学电脑中只安装了WPS,从而导致创建excel文件时,在保存这一步骤时会报错 (-2147352573, ‘找不到成员。’, None, None),因为现在xlwings库对wps兼容性不够导致的,暂时没有想到合适的解决方案,所以只能暂时绕过这个操作,先使用openpyxl先新建一个excel文件,然后在继续用xlwings来操作,代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 首先引入对应的包
import os
import openpyxl
import xlwings as xw
from win32com.client import Dispatch


def create_excel():
	create_path =./WPS/Excel”				# 所要创建表格的目录地址

	# 判断路径是否存在
    isExists = os.path.exists(create_path)
    isPath = os.path.isdir(create_path)
    if isExists and isPath:
    	newFilePath = create_path + "/Workbook.xlsx"
    else:
    	os.mkdir(create_path)
    	newFilePath = create_path + "/Workbook.xlsx"

	# 使用openpyxl先新建一个excel文件
 	wb = openpyxl.Workbook()
 	sh = wb[wb.sheetnames[0]]
 	sh.title = "Sheet1"
 	wb.save(newFilePath)
 	wb.close()

    xl = xw._xlwindows.COMRetryObjectWrapper(Dispatch("Ket.Application"))
    impl = xw._xlwindows.App(visible=False, add_book=False, xl=xl)
    
    # 新建一个excel(visible为是否需要可视化,True为可视化,False为后台运行)
    excelApp = xw.App(visible=True, add_book=False, impl=impl)
 	workbook = excelApp.books.open(newFilePath)
   
     return workbook

4、针对WPS中激活 Sheet 页

对于WPS激活Sheet页时,使用xlwings库常规的激活方式会报错,这个时候就需要用api的方式来规避这个问题

解决方法如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 首先当然是先引入对应的包
import os
import xlwings as xw
from win32com.client import Dispatch

def active_sheet():
	excelPath =./WPS/Excel/test.xlsx”				# excel文件
	# 为了避免直接修改库自带的源码,就研究了下源码,发现只要引入impl就可以了
    # noinspection PyProtectedMember
    xl = xw._xlwindows.COMRetryObjectWrapper(Dispatch("Ket.Application"))
    # noinspection PyProtectedMember
    impl = xw._xlwindows.App(visible=False, add_book=False, xl=xl)
    
    # 新建一个excel(visible为是否需要可视化,True为可视化,False为后台运行)
    app = xw.App(visible=True, add_book=False, impl=impl)
    BaseWorkBook = app.books.open(excelPath)
    
    # 根据Sheet页名称激活Sheet页
	sheetName = "sheet页名称"
	sh = BaseWorkBook.sheets[sheetName]
	sh.api.Application.Sheets.Item(sheetName).Activate()
	
	# 根据Sheet位置激活Sheet页
	sheetIndex = 1		# sheet页位置
	sh = BaseWorkBook.sheets[sheetName]
	sh.api.Application.Sheets.Item(sh.name).Activate()

你可能感兴趣的:(Python,python,开发语言,wps)