有关读取word文档及单词拼写检查的问题,请各位大侠帮忙

ljv_23 2000-06-20 05:43:00
问题1。在vc中如何读取word文档,主要是文本内容,有没有现成的类,函数,如mfc类。
问题2。在vc中如何实现类似word中的单词拼写检查。

谢谢。
...全文
257 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcmfc 2000-06-22
  • 打赏
  • 举报
回复
2:查一下word的拼写检查的宏调用.
vcmfc 2000-06-22
  • 打赏
  • 举报
回复
别人代码,对你有帮助。到:www.v-galaxy.com
VC打开WORD完全版。

一:先用Classwizard加入msword8.olb,选择_Application, Documents, _Document三个类(想打开一个文件的最小集合了);
二:看如下程序片段和说明(如有问题,还望指教哈!)

_Application m_app;
Documents m_docs;
_Document m_doc;

try
{
//产生WORD的对象
if(!m_app.CreateDispatch("Word.Application"))
TRACE("\nm_word.CreateDispatch failed!!");
m_app.SetVisible(true);
m_app.SetScreenUpdating(false);//禁止服务器端的刷新可以加快速度
m_app.SetCaption("欢迎使用Word自动化");
//以上有些函数是从哪里查出来的呢?请查看msword8.cpp,其实意思很明显。

//得到所有已打开文档的接口,因为有可能打开多个文件
m_docs = m_app.GetDocuments();
//利用m_docs打开时返回的调度接口直接给m_doc赋值,
//在以后用m_docs.Item(COleVariant((short)i))来给m_doc赋值,i是从1开始
//还是从0开始就没试了,EXCEL的Workbooks是从1开始的。
m_doc = m_docs.Open(COleVariant("c:\\mydoc.doc"));

//接下来想干点什么呢?那随便了,建议:
//1:用宏录制的方法看看VBA,然后到VC中去找相应的类和函数,
//2:把msword8.h打印下来,花点时间看看都有什么类和什么函数,
// 往往从字面就能找到函数,但那些希奇古怪的参数嘛,
// 就得好好琢磨了。

//不好意思,要关闭了哦,不要告诉我你那里产生了异常!
COleVariant vFalse((short)FALSE),
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
m_app.Quit(vFalse, vOpt, vOpt);
m_app.ReleaseDispatch(); //这里不加ReleaseDispatch()就会产生异常(非致命)

}
catch(COleException *e) //有异常?我就逮、逮、逮!
{
LPVOID lpMsg;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, e->m_sc,
MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT),(LPTSTR) &lpMsg,
0, NULL);
::MessageBox(NULL, (LPCTSTR)lpMsg, "COM Error(COM错误)", MB_OK | MB_SETFOREGROUND);
::LocalFree( lpMsg );
}
catch(COleDispatchException *e) //有异常?我就捉、捉、捉!
{
char msg[512];
sprintf(msg, "Run-time error '%d':\n\n%s",
e->m_scError & 0x0000FFFF, e->m_strDescription);
::MessageBox(NULL, msg, "Server Error(服务器错误)", MB_OK | MB_SETFOREGROUND);
}

不过说实话,如果真出了异常,就不知该怎么办了,一般看MESSAGEBOX的信息就知道大概了,但具体解决嘛就天知、地知、你不知、我不知了,呵呵。。。。。。

注意,只有一个参数的m_docs.Open()是重载了的,在此要特别向大名一排兄致谢,要不是他老人家(5~~~~~~,去得好早啊......)百忙之中(忙?哼!成天泡MM,当然忙了)教我如何重载那些鬼怪的函数,我早就翘翘了。呵呵,这个函数对比如下,其实看一看就知道重载时要注意的地方了,


//原函数,看看几个参数?不吓S才怪!
LPDISPATCH Documents::Open(VARIANT* FileName, VARIANT* ConfirmConversions, VARIANT* ReadOnly, VARIANT* AddToRecentFiles, VARIANT* PasswordDocument, VARIANT* PasswordTemplate, VARIANT* Revert, VARIANT* WritePasswordDocument,
VARIANT* WritePasswordTemplate, VARIANT* Format)
{
LPDISPATCH result;
static BYTE parms[] =
VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT;
InvokeHelper(0xc, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms,
FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format);
return result;
}

//重载后的函数,多简明啊,就一个参数,呵呵。。。。
//想把有些函数想重载成没参数时,就看看msword8.cpp里的一些本来就
//不带参数的函数吧,它的InvokeHelper是怎么写的
//注意:参数全带上当然更customized,但如没特殊要求还是图个方便吧
// 不同意的举手哈,1?没一个人,呵呵,太好了,太好了。。。。。
LPDISPATCH Documents::Open(VARIANT* FileName)
{
LPDISPATCH result;
static BYTE parms[] = VTS_PVARIANT;
InvokeHelper(0xc, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, FileName);
return result;
}

到此为止,WORD已经搞定,再次感谢排长同志。什么?大家不认识,嗨,就是那个路人皆知的泡MM高手啊,真是的!

谢谢!谢谢!各位(大声喊到),我说各位看管,大家有钱的出钱,没钱的出星了哈!什么????连星也没有?5~~~~~~,那就。。。。那就。。。。。鼓掌吧!只听的PalaPalaPalaPala一片。。。。。。。。。

再见!再见!大家千万别想我啊。。。。。。。



16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧