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

2021-11-17 14:59:07 浏览数 (1)

配置组件服务

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

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

代码语言:javascript复制
Dcomcnfg

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

如果没找到(wps……):

Win R 快捷键进入运行菜单

输入:

代码语言:javascript复制
mmc -32

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

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

右键设置属性,

设置标识为:交互式用户

点击”安全”标签,

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

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

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

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

  • NETWORK SERVICE
  • IIS_IUSRS

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

Java调用COM

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

代码语言:javascript复制
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

对象名称修改

代码语言:javascript复制
createobject("wps.applicaion")

修改为

代码语言:javascript复制
createObject("kwps.application")

Python调用

安装依赖

代码语言:javascript复制
pip install pypiwin32

代码

代码语言:javascript复制
#!/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)

0 人点赞