获取当前打开的WORD文件路径

OLE(Object Linking and Embedding,对象连接与嵌入)。是一种面向对象的技术,利用这种技术可开发可重复使用的COM组件。OLE不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为组件对象模型(Component Object Model),简称COM。OLE可以用来创建符合文档,复合文档包含了创建于不同源应用程序,有着不同类型的数据,因此它可以把文字、声音、图像、表格、应用程序等组合在一起。

Office提供的OLE接口可以让我们控制Office系列软件,包括打开关闭文件,往文件里写数据等一系列的事情,下面的代码通过OLE获取当前WORD打开的文件路径:

void GetActiveWordFilePath()
{
	CLSID clsid;
       //初始化OLE
       CoInitialize(NULL);
	HRESULT hr = S_FALSE;
	OLECHAR FAR* szDocMember;
	OLECHAR FAR* szMember;
	bool bSucceeded = false;
        //获取WORD对象的CLASSID
	hr = CLSIDFromProgID(L"Word.Application",&clsid);
	szDocMember = L"ActiveDocument";

	if(FAILED(hr))
	{
		CoUninitialize();
		return;
	}

	IUnknown *pUnk;
        //获取当前活动对象
         hr = GetActiveObject(clsid, NULL,(IUnknown**)&pUnk);
	if(SUCCEEDED(hr))
	{
		IDispatch* pDisp;
		hr = pUnk->QueryInterface(IID_IDispatch,(void**)&pDisp);
		if(SUCCEEDED(hr))
		{
			DISPID dispid;
			DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
			VARIANT varResult;

			hr = pDisp->GetIDsOfNames(IID_NULL, &szDocMember, 1, LOCALE_USER_DEFAULT, &dispid);
			if(SUCCEEDED(hr))
			{
                               //获取ActiveDocument属性值
				hr = pDisp->Invoke(dispid, IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYGET,&dispparamsNoArgs,&varResult,NULL,NULL);
				if(SUCCEEDED(hr))
				{
					IDispatch* pDoc = varResult.pdispVal;
					szMember = L"FullName";
					hr = pDoc->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
					if(SUCCEEDED(hr))
					{
                                              //获取文件路径属性值
                                              hr = pDoc->Invoke(dispid, IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYGET,&dispparamsNoArgs,&varResult,NULL,NULL);
						if(SUCCEEDED(hr))
						{
							wchar_t* wbstr = varResult.bstrVal;
						  	DWORD dwLen = WideCharToMultiByte(CP_ACP,0, wbstr,-1,NULL,0,NULL,FALSE);
							char* szResult = new char[dwLen];
							WideCharToMultiByte(CP_ACP,0,wbstr,-1, szResult,dwLen,NULL,FALSE);
							cout<<"当前打开的WORD文档路径:"<<szResult<<endl;
							delete[] szResult;
						}
					}

					if(pDoc != NULL)
						pDoc->Release();
				}

			}

		if(pDisp != NULL)
			pDisp->Release();
		}

		if(pUnk != NULL)
			pUnk->Release();
	}

	CoUninitialize();

}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要直接打开WPS文件(以.docx、.pptx、.xlsx等格式为例),可以使用Python的第三方库python-docx、python-pptx和openpyxl。 1. 对于.docx文件,可以使用python-docx库来读和编辑Word文档。首先,需要安装python-docx库,可以使用命令`pip install python-docx`进行安装。然后,使用以下代码打开WPS文件并读其内容: ```python from docx import Document document = Document('file.docx') # 替换为WPS文件路径 for paragraph in document.paragraphs: print(paragraph.text) ``` 2. 对于.pptx文件,可以使用python-pptx库来读和编辑PowerPoint演示文稿。首先,需要安装python-pptx库,可以使用命令`pip install python-pptx`进行安装。然后,使用以下代码打开WPS文件并读其内容: ```python from pptx import Presentation presentation = Presentation('file.pptx') # 替换为WPS文件路径 for slide in presentation.slides: for shape in slide.shapes: if shape.has_text_frame: for paragraph in shape.text_frame.paragraphs: for run in paragraph.runs: print(run.text) ``` 3. 对于.xlsx文件,可以使用openpyxl库来读和编辑Excel工作簿。首先,需要安装openpyxl库,可以使用命令`pip install openpyxl`进行安装。然后,使用以下代码打开WPS文件并读其内容: ```python from openpyxl import load_workbook workbook = load_workbook('file.xlsx') # 替换为WPS文件路径 worksheet = workbook.active # 获取当前活动工作表 for row in worksheet.iter_rows(): for cell in row: print(cell.value) ``` 通过使用这些库中的相应函数,可以读WPS文件的内容,并根据需求进行后续处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值