zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Windows上开机自启BAT调用WPS的COM组件失败的解决方法

2023-03-14 22:57:36 时间

配置组件服务

Java中使用jacob调用WPS的COM组件的时候,手动启动可以,但是开机自启却不行

Win+R 快捷键进入运行菜单,输入

Dcomcnfg

找到: [组件服务]=>[计算机]=>[我的电脑] =>[DCOM配置] =>[wps……]

如果没找到(wps……):

Win+R 快捷键进入运行菜单

输入:

mmc -32

[文件]——[添加或删除管理单元]——[组件服务](从可用管理单元,添加到所选管理单元,点击:确定)

添加完以后,在控制台根节点下,找到[wps……],

右键设置属性,

设置标识为:交互式用户

点击”安全”标签,

在”启动和激活权限”上点击”自定义”,然后点击对应的”编辑”按钮,在弹出的”安全性”对话框中填加

  • NETWORK SERVICE 用户(注意要选择本计算机名)
  • IIS_IUSRS

并给它们赋予本地启动本地激活权限;

在”访问权限”上点击”自定义”,然后点击”编辑”,在弹出的”安全性”对话框中也填加

  • NETWORK SERVICE
  • IIS_IUSRS

然后给他们赋予”本地访问”权限.

Java调用COM

工具类开头的宏说明 构件ActiveX组件实例

ActiveXComponent ax = new ActiveXComponent("name");

其中的 name 的值和你需要调用的ActiveX控件有关 每个 Dispatch 对象看成是对 ActiveX 控件的一个操作,这一步是获得该 ActiveX 控件的控制权

9.0之后的版本接口名称

MS控件名

name

WPS文字

KWPS.Aplication

WPS的Excel

KET.Application

WPS的演示文档

KWPP.Application

Word

Word.Application

Excel

Excel.Application

Powerpoint

Powerpoint.Application

浅谈不同WPS的Api版本调用–老版本V8与新版本V9

对象名称修改

createobject("wps.applicaion")

修改为

createObject("kwps.application")

Python调用

安装依赖

pip install pypiwin32

代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
import win32com.client


def ConvertByWps(sourceFile, targetFile):
    if not os.path.exists(sourceFile):
        print(sourceFile + "不存在,无法继续!")
        return False
    typemap = {
        'doc': 'word',
        'docx': 'word',
        'ppt': 'ppt',
        'pptx': 'ppt',
        'xls': 'excel',
        'xlsx': 'excel',
    }
    name_arr = sourceFile.split(".")
    suffix = name_arr[len(name_arr) - 1]
    wpstype = typemap.get(suffix)

    if (wpstype is None):
        return False

    os.system('taskkill /im wps.exe')
    # 如果文件存在就删除
    if os.path.exists(targetFile):
        os.remove(targetFile)
    if wpstype == 'word':
        ConvertDocToPdf(sourceFile, targetFile)
    elif wpstype == 'ppt':
        ConvertPptToPdf(sourceFile, targetFile)
    elif wpstype == 'excel':
        ConvertXlsToPdf(sourceFile, targetFile)
    if os.path.exists(targetFile):
        return True
    else:
        return False


# 转换 Word文件档到pdf
def ConvertDocToPdf(src, dst):
    wps = win32com.client.Dispatch("Kwps.Application")
    wps.Visible = False
    doc = wps.Documents.Open(src)
    doc.ExportAsFixedFormat(dst, 17)
    doc.Close()
    wps.Quit()


# 转换 PPT文件档到pdf
def ConvertPptToPdf(src, dst):
    wps = win32com.client.Dispatch("Kwpp.Application")
    wps.Visible = False
    ppt = wps.Presentations.Open(src)
    ppt.SaveAs(dst, 32)
    ppt.Close()
    wps.Quit()


# 转换 XLS文件档到pdf
def ConvertXlsToPdf(src, dst):
    wps = win32com.client.Dispatch("Ket.Application")
    excel = wps.Workbooks.Open(src)
    excel.ExportAsFixedFormat(0, dst)
    excel.Close()
    wps.Quit()


if __name__ == '__main__':
    # 当前目录
    d = os.path.dirname(__file__)
    abspath = os.path.abspath(d)

    # 测试用例
    src = abspath + r"/Doc/test.docx"
    dst = abspath + r"/Doc/test.pdf"
    r = ConvertByWps(src, dst)
    print(r)