完成将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();
}
//以下是完成将利用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();
}
相关文章推荐
- 要求从用户输入的多行文本中提取学生的姓名、学号及登录日期,并封装到 Student 类中作为类的私有属性。创建一个Student类型的对象数组,对学号进行 升序排序并输出。
- C++利用指针数组和快排对输入的字符串进行排序
- 6. 利用word的替换功能可以完成很多工作——word高级替换技巧
- 利用PinYin4j 实现List中的对象按数字,字母, 汉字排序
- 利用java对基本汉字(unicode编码4E00-9FA5)进行笔画排序
- 如何利用sorted函数对列表,元组或者对象进行排序
- 用面向对象解决:输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列
- 结构体指针数组完成输入学生姓名学号数学语文成绩修改排序显示等功能
- List对象利用属性进行排序的通用工具类
- (STL中自带的排序功能7.3.3)POJ 1318 Word Amalgamation(求解一个单词是否在字典里面。解法:将单词按字典序处理后的结果与字典中的单词安字典序处理后的结果进行比较)
- 利用C++Builder 中OLE自动化功能实现调用Word进行报表制作
- STL极简地完成“输入——排序——输出”的功能
- 要求从用户输入的多行文本中提取学生的姓名、学号及登录日期,并封装到 Student 类中作为类的私有属性。创建一个 Student 类型的对象数组,对学号进行 升序排序并输出
- gridview利用 DataView 对象进行排序和过滤数据
- NSArray利用Cocoa框架进行汉字排序
- 基于Metronic的Bootstrap开发框架经验总结(13)--页面链接收藏夹功能的实现2(利用Sortable进行拖动排序)
- 【LeetCode】two num 利用comparable接口 对对象进行排序
- 1.读取excel文件,将输入存储到数据库中(JXL) 2.完成商品的检索相关功能 1.根据分类,显示分类下所有的商品信息,按照库存量从低到高排序(提供补货依据) 2.模糊搜索,根据商品信息(名
- NSArray利用Cocoa框架进行汉字排序
- 利用Python中的输入和输出功能进行读取和写入的教程