c++ 调用 python doc操作文件自动粘贴功能调研

python安装环境准备

NOTICE:

不建议使用conda库内的python库,调用会报ucrtbase.dll错误,慎用。
python3.6.6 支持vs2010,msvc120

python代码

import win32com
from win32com.client import Dispatch, constants

def TestWinCom():
    w = win32com.client.Dispatch('Word.Application')
    # 或者使用下面的方法,使用启动独立的进程:
    # w = win32com.client.DispatchEx('Word.Application')

    # 后台运行,不显示,不警告
    w.Visible = 1
    w.DisplayAlerts = 0

    # 打开新的文件
    doc = w.Documents.Open("E:\\test.docx")
    # worddoc = w.Documents.Add() # 创建新的文档
    s = w.Selection
    s.Paste()

c++调用代码:

// docopt.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "Python.h"
#include <stdio.h>
#include <Windows.h>

int main()
{
	Py_Initialize();              //初始化,创建一个Python虚拟环境

	if (Py_IsInitialized())
	{
		PyObject* pModule = NULL;
		PyObject* pFunc = NULL;
		int argc = 1;
		wchar_t* argv[] = { L"" };
		PySys_SetArgv(argc, argv);   //加入argv参数 否则出错

		pModule = PyImport_ImportModule("docopt");  //参数为Python脚本的文件名
		if (pModule)
		{
			pFunc = PyObject_GetAttrString(pModule, "TestWinCom");   //获取函数
			PyEval_CallObject(pFunc, NULL);           //执行函数
		}
		else
		{
			printf("导入Python模块失败...\n");
		}
	}
	else
	{
		printf("Python环境初始化失败...\n");
	}
	Py_Finalize();
}

代码调试过亲测可用
注意:

		int argc = 1;
		wchar_t* argv[] = { L"" };
		PySys_SetArgv(argc, argv);   //加入argv参数 否则出错
pModule = PyImport_ImportModule("docopt");  //参数为Python脚本的文件名 为NULL,报错,切记

环境搭配什么的比较简单,略过

visual studio 编译好的可执行程序 报错问题解决:

Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

需要将python安装目录下的DLLs和Lib文件夹放可执行程序目录内
在这里插入图片描述
c++主函数调用方式新增两行代码解决和保证部分未装过python环境电脑正常运行

	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('Dlls/')");
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值