1. 程式人生 > >VC讀寫word檔案(RTF檔案)

VC讀寫word檔案(RTF檔案)

這幾天一直在研究VC讀寫有格式文字檔案(RTF檔案)的方法,終於動明白一些,下面是我的程式碼,在VS2005下執行正常,希望能幫助大家解決一點問題,若有書寫不周,歡迎各位批評指正 。

void CVCreadwriteRTFDlg::OnBnClickedButton1()
{
// 變數的宣告
COleVariant  vTrue((short)TRUE), 
                  vFalse((short)FALSE), 
                  vOpt((long)DISP_E_PARAMNOTFOUND,  VT_ERROR);

CApplication oWordApp ;
CSelection oSel ; 
CDocuments oDocs ;
CDocument0 oDoc ; 
CParagraphs paragraphs ;

CStringArray aryText;

long paCounst;
int  lc ;
 
    // 首先建立一個word例項物件
if (!oWordApp.CreateDispatch(TEXT("Word.Application")) ){

AfxMessageBox( TEXT( "CreateDispatch  failed." ) , MB_OK &brvbarMB_SETFOREGROUND); 
return;  // 一定要返回,否則程式崩潰
}

// 顯示此物件檔案 ,您也可以不呼叫此句,不顯示物件檔案
oWordApp.Set_Visible(TRUE);

// 建立文件
oDocs = oWordApp.get_Documents(); 

// 開啟一個新文件,將e://BuildJobEdit.rtf檔案的內容新增到新文件中
CComVariant tpl(_T("e://BuildJobEdit.rtf")), NewTemplate(false), DocType(0), Visble;
oDoc = oDocs.Add(&tpl,&NewTemplate,&DocType,&Visble);
     
// 選中文件中的所有內容
oSel = oWordApp.get_Selection();
oSel.WholeStory();// 此句必須有,否則後續程式碼無效。

// 得到所有段
paragraphs = oSel.get_Paragraphs();
 
paCounst = paragraphs.get_Count();
 
// 將所有段中的每一段都存在數組裡
for( lc = 1 ; lc < paCounst+1 ; lc++ ){

// 得到一段
CParagraph  paragraph;
paragraph = paragraphs.Item( (long)lc );

// 得到一段的文字
CRange range = paragraph.get_Range();
CString strRangeText = range.get_Text();
// AfxMessageBox( strRangeText );

// 儲存到數組裡
aryText.Add( strRangeText );

//釋放物件
paragraph.ReleaseDispatch();

}

//// 檢驗
//INT_PTR iCount = aryText.GetCount();

//for(int lct=0; lct < iCount; lct++){
//
// AfxMessageBox( aryText.GetAt(lct) );
//}


//將當前文件儲存到新的文件中
oDoc.SaveAs(COleVariant( TEXT("E://new.rtf") ),
COleVariant((short)0),
vFalse, COleVariant( TEXT("") ), vTrue, COleVariant( TEXT("") ),
vFalse, vFalse , vFalse, vFalse , vFalse,
vFalse, vFalse , vFalse, vFalse , vFalse
);

// 釋放各種物件
oSel.ReleaseDispatch();
paragraphs.ReleaseDispatch();
oDocs.ReleaseDispatch();
oDoc.ReleaseDispatch();
CComVariant SaveChanges(false), OriginalFormat, RouteDocument;
oWordApp.Quit( &SaveChanges,&OriginalFormat,&RouteDocument );
oWordApp.ReleaseDispatch();

}