您的位置:首页 > 其它

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

2011-04-11 14:15 323 查看
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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐