1.背景簡介
因需要對office系列進行程式操作,特需要使用com程式設計。
microsoft project生成進度計畫,office家族軟體,檔案字尾為.mpp。
具體資訊見維基百科
讀取mpp檔案,網路上示例基本為c#,因為我所使用的是vc,c#**只能做參考了。
因為com元件是通用的,跨語言的(微軟系),既然c#能做,那麼vc也能做。
開發環境:
project版本:microsoft project 2010。
vs版本:vs2005。
2.vc示例程式
1、 建立mfc工程,工程名為mympp。
建立乙個對話方塊工程。
2、 增加com介面包裝類。
com介面的呼叫,可以通過mfc新增進來。
右鍵add->class
選擇mfc class from typelib
選擇ms project com元件,並生成包裝類。
microsoft project 14.0 object library:本機安裝的project 2010所提供的com元件。
generated classes:為所需要用到的包裝類,包裝inte***ces中的介面。
最後,會生成五個標頭檔案。
ciprojectdoc.h、cmsproject.h、cprojects.h、ctask.h、ctasks.h。
3、 com標頭檔案調整。
將(ciprojectdoc.h、cmsproject.h、cprojects.h、ctask.h、ctasks.h)
標頭檔案中**替換。
#import "c:\\program files\\microsoftoffice\\office14\\msprj.olb" no_namespace替換為#pragma once
ciprojectdoc.h、cmsproject.h中使用了很多沒有生成的類,會導致編譯不通過。
解決方法:將出現t*的地方替換為lpdispatch。
例:調整為:
4、 mpp讀取**。
新增乙個按鈕,按鈕響應**如下。
#include "comdef.h"
#include "cmsproject.h"
#include "cprojects.h"
#include "ciprojectdoc.h"
#include "ctasks.h"
#include "ctask.h"
void cmymppdlg::onbnclickedbutton1()
cstring strfilepath = filedlg.getpathname();
::coinitialize(null);
readmppinfo(strfilepath);
::couninitialize();
}void cmymppdlg::readmppinfo(const cstring& strfilepath)
_variant_t(true), vtmissing, vtmissing,
vtmissing, vtmissing, vtmissing,
vtmissing, vtmissing, vtmissing, vtmissing,
1, vtmissing, vtmissing,
vtmissing, vtmissing);
if (!openres)
cprojects projs;
int nprojcount = projs.get_count();
for (int i = 1; i <= nprojcount; i++)}}
catch(_com_error &e)
if (!strtipinfo.isempty())
}int cmymppdlg::gettimespan(const coledatetime& dtstart, const coledatetime& dtfinish)
else
return ndays;
}cstring cmymppdlg::oledatetostr(coledatetime oledate)
cstring cmymppdlg::inttocstring(int ninput)
5、 執行結果。
php解析mpp檔案
php沒有找到相應的包 j a的mpxj可以實現 所以借助j abridge.jar j abridge介紹 1.安裝jdk,設定環境變數 我的版本jdk1.8.0 131 我的版本mpxj 7.0.2 解壓,將mpxj.jar和lib下面的commons collections4 4.1.jar ...
VC 檔案操作
1 檔案的查詢 當對乙個檔案操作時,如果不知道該檔案是否存在,就要首先進行查詢。mfc中有乙個專門用來進行檔案查詢的類 cfilefind 使用它可以方便快捷地進行檔案的查詢。下面這段 演示了這個類的最基本使用方法。cstring strfiletitle cfilefind finder bool...
VC 檔案操作
try else catch cmemoryexception e e geterrormessage szbuff,max path afxmessagebox szbuff catch cfileexception e e geterrormessage szbuff,max path afxm...