[other] 调用wps
Tofloor
poster avatar
诚外无物
deepin
2023-11-09 23:37
Author

deepin23 ,python ,如何后台调用wps,打开excel文件,及保存文件,不显示wps被打开的界面。

Reply Favorite View the author
All Replies
liwl
deepin
2023-11-10 00:22
#1

调用wps可能不行,但是你可以用python的第三方库,创建execl的,然后wps打开这些execl就可以的

或者看看wps官方有开放api吗

Reply View the author
北冥夜未央
deepin
Ecological co-builder
2023-11-10 00:51
#2

onlyoffice开源的,看看能不能直接从源码接入创建修改excel文件。

Reply View the author
dgmenghuan
deepin
2023-11-10 16:33
#3

网上N多python建立excel文件的方法,但还是得引入至少三个python库文件才行

Reply View the author
Breeze
deepin
2023-11-12 00:00
#4

从描述来,完全不需要打开wps呀,python本来就有直接对excel表格进行操作的库

Reply View the author
诚外无物
deepin
2023-11-12 09:44
#5

有些excel文件,使用pandas或者openpyxl都出错,必须使用wps打开和保存一下,然后,再用pandas和openpyxl读写就不出错了。

Reply View the author
诚外无物
deepin
2024-02-20 10:14
#6

从单位网站下载生成的数据报表(excel文件),直接使用Python的openpyxl或pandas等库打开总是出现异常。但是使用wps打开excel文件仅做一下保存,再使用openpyxl或pandas等库打开就正常了。

Reply View the author
诚外无物
deepin
2024-02-20 10:29
#7

def excelfile_open_save(file_path):

判断操作系统

os_name = platform.system()

# 根据操作系统不同,导入不同的调用wps应用的库及相关操作
if os_name == "Windows":
    # 需要Python的环境安装win32.com,安装命令:pip install win32.com
    # 导入
    try:
        import win32com.client as win32
        # 调用wps打开一个excel文件并重新保存一下
        app = win32.DispatchEx('Excel.Application')  # 启动独立的进程,关闭时不影响其他文件
        app.Visible = False  # 不打开excel界面
        app.DisplayAlerts = False  # 不显示警告信息
        wb = app.Workbooks.Open(file_path)
        wb.Save()
        wb.Close()
        app.Quit()
    except Exception as e:
        QMessageBox.information(None,'出错了','调用win32com库出错,也许是没有安装,可以尝试执行pip install win32.com!')

elif os_name == "Linux":
    # /////////////////////////////////
    # 方法一
    # /////////////////////////////////
    # 导入模块
    # import subprocess, signal
    # # 调用wps
    # try:
    #     # 定义WPS路径,linux环境变量中有wps
    #     wps_path = 'wps'
    #     # 启动WPS进程并打开指定文件,不弹出WPS界面
    #     cmd = [wps_path, '--headless', file_path]
    #     process = subprocess.Popen(cmd)
    #
    #     # 等待一段时间以确保WPS进程完全启动并打开文件
    #     time.sleep(2)  # 等待时间根据实际情况调整
    #
    #     # 保存文件,这里通过发送Ctrl+S快捷键的方式来保存文件
    #     # 注意:这种方式依赖于WPS处理快捷键的方式,不同版本的WPS可能有差异
    #     print("正在保存文件...")
    #     time.sleep(2)  # 等待一段时间以确保WPS准备好接收键盘输入
    #     process.send_signal(signal.SIGUSR1)  # 发送SIGUSR1信号模拟按下Ctrl键
    #     time.sleep(1)  # 等待一段时间以确保Ctrl键已按下
    #     process.send_signal(signal.SIGUSR2)  # 发送SIGUSR2信号模拟按下S键
    #     time.sleep(1)  # 等待一段时间以确保S键已按下
    #     process.send_signal(signal.SIGUSR1)  # 发送SIGUSR1信号模拟松开Ctrl键
    #
    #     return True
    # except Exception as e:
    #     print(f"出现错误: {e}")
    #     return False
    # finally:
    #     process.kill()  # 关闭WPS进程

    # /////////////////////////////////
    # 方法二
    # /////////////////////////////////
    from pywpsrpc.rpcetapi import createEtRpcInstance, etapi
    '''open excel '''
    # 这里仅创建RPC实例
    hr_excel, rpc_excel = createEtRpcInstance()
    hr_excel, app_excel = rpc_excel.getEtApplication()
    workbooks = app_excel.Workbooks

    # 打开指定表格文件
    hr, workbook = workbooks.Open(file_path)
    workbook.Close(SaveChanges=True)  # 关闭并保存excel文件
    app_excel.Quit()                  # 关闭wps

使用上面定义的excelfile_open_save(file_path),可以调用wps打开及保存一个excel文件。如下问题:

1、在window平台,可以对用户不显示wps打开文件的界面,但是在linux平台,无论是方法一还是方法二,都会显示excel文件打开的窗口。

2、在linux平台,使用方法二,python编写的程序中需要2次调用wps打开2个excel文件及保存后退出,编写一个shell文件(hn.sh)激活环境及调用python运行代码,在终端执行source hn.sh文件,在代码第一次调用wps打开excel文件,wps打开后会卡死,手动结束wps进程,python程序正常运行,第二次调用wps正常打开及保存和退出。而且如果是在pycharm中执行,则没有上面问题,运行正常。

不知道是什么原因?

Reply View the author