完成将vc利用word对象的排序功能对输入的汉字进行排序

AfxOleInit();//初始化一个com对象

//以下是完成将利用word对象的排序功能对输入的汉字进行排序

#include "msword.h"
#include <atlbase.h>
BSTR CWordocx5Ctrl::sortword(LPCTSTR str)
{
 CString strResult=str;
 // TODO: Add your dispatch handler code here
    _Application app;//创建一个word对象
 app.CreateDispatch(_T("Word.Application"));//启动word对象
 app.SetVisible(FALSE);
 Documents docs=app.GetDocuments();//获得文档对象
 //初始化话文档参数值
 CComVariant Template(_T("")),NewTemplate(false),DocumentType(0),Visible;
 docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);
 Selection sel=app.GetSelection();//获得文档对象选区
    //str.Trim();
 if(strResult.IsEmpty())//判断字符串是否为空
 {
    return NULL;
 }
 //对输入的汉字进行排序
 for(int i=0; i<strResult.GetLength()/2; i++)
 {
   sel.TypeText(strResult.Mid(i*2,2)+"/r/n");//两个字符表示一个汉字,对输入的汉字字符串进行处理
 }
    sel.WholeStory();//全部选择
    /* 这是进行段落按汉字笔画排序的宏
      Selection.Sort ExcludeHeader:=False, FieldNumber:="段落数", SortFieldType:= _
      wdSortFieldStroke, SortOrder:=wdSortOrderAscending, FieldNumber2:="", _
      SortFieldType2:=wdSortFieldSyllable, SortOrder2:=wdSortOrderAscending, _
      FieldNumber3:="", SortFieldType3:=wdSortFieldSyllable, SortOrder3:= _
      wdSortOrderAscending, Separator:=wdSortSeparateByTabs, SortColumn:=False, _
      CaseSensitive:=False, LanguageID:=wdSimplifiedChinese, SubFieldNumber:= _
      "段落数", SubFieldNumber2:="段落数", SubFieldNumber3:="段落数" 
     */
      CComVariant ExcludeHeader(false), FieldNumber(_T("段落数")), SortFieldType(5),
      SortOrder(0), FieldNumber2(_T("")), SortFieldType2(3), SortOrder2(0),
   FieldNumber3(_T("")),SortFieldType3(3), SortOrder3(0), Separator(0),
   SortColumn(false), CaseSensitive(false), LanguageID(2052), SubFieldNumber(_T("段落数")),
   SubFieldNumber2(_T("段落数")), SubFieldNumber3(_T("段落数"));
   //COleVariant vOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);//针对word2003参数补齐,声明
   CComVariant BidiSort,IgnoreThe, IgnoreKashida,IgnoreDiacritics,IgnoreHe;
   /*
       在宏定义中 使用MsgBox显示定义的常量值
          wdSortFieldStroke    5
    wdSortOrderAscending 0
          wdSortFieldSyllable  3
    wdSortSeparateByTabs 0
          wdSimplifiedChinese  2052
          //MsgBox wdSortSeparateByTabs
       */
    //排序
   sel.Sort(
   &ExcludeHeader,   &FieldNumber,     &SortFieldType,    &SortOrder,
   &FieldNumber2,    &SortFieldType2,  &SortOrder2,       &FieldNumber3,
   &SortFieldType3,  &SortOrder3,      &SortColumn,       &Separator,
   &CaseSensitive,   &BidiSort,        &IgnoreThe,        &IgnoreKashida,
   &IgnoreDiacritics,&IgnoreHe,        &LanguageID,       &SubFieldNumber,
   &SubFieldNumber2, &SubFieldNumber3);
 //对word文档中的汉字完成排序,可以使用sel.GetText()取得文本
 //现在使用复制到剪贴板的方式
   sel.Copy();
   if(OpenClipboard())
   {//从剪贴板取出排序后的文字
    HGLOBAL hMem=::GetClipboardData(CF_TEXT);
    //对获得的剪贴板对象加锁
    LPCTSTR lp=(LPCTSTR)::GlobalLock(hMem);
    strResult=lp;//取出数据
    //释放锁
    ::GlobalUnlock(hMem);
    CloseClipboard();//关闭剪贴板
    strResult.Replace("/r/n"," ");//删除回车换行符
   }
   //释放资源
   sel.ReleaseDispatch();
   docs.ReleaseDispatch();
      //初始化退出参数值
   CComVariant SaveChanges(false),OriginalFormat,RouteDocument;
      app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
      app.ReleaseDispatch();
   return strResult.AllocSysString();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值