分享

vc对word文件的基础操作

 源码无限 2012-04-17

如何将Word文件带格式读取到内存中?现在的方法是将不同段落(每个不同风格为一个段落)分开,循环保存段落的内容和格式;但不知有没有更好的办法;

网上搜索“Office自动化”,或者在\Microsoft Office\OFFICE11\2052的目录下有以VBA开头的chm文件,中文的,里面有介绍Word的操作;

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(); 

CFont font = range.get_Font(); 

// 设置文本的字体大小与颜色 
//font.put_Color( RGB(0,255,0) ); 
//font.put_Size( 12 ); 
// AfxMessageBox( strRangeText ); 

// 保存到数组里 
aryText.Add( strRangeText ); 

//释放对象 
paragraph.ReleaseDispatch(); 

//// 修改word,这里先拿RTF文件第三行试一下 
//paragraphs = oSel.get_Paragraphs(); 
paragraph = paragraphs.Item( (long)3); 
range = paragraph.get_Range(); 
CString strRangeText = range.get_Text(); 
long strLen = strRangeText.GetLength(); 
range.SetRange(10,strLen); 
CString strRangeText1 = range.get_Text(); 
range.put_Text( TEXT("444\r")); 


//将当前文档保存到新的文档中 
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 
); 

//// 检验 
//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(); 

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多