编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 导出Word文档目录结构
  · 导出Word文档目录结构

用户:  明日科技
发帖:  417 篇
作品:  1 个
回复:  2 篇
技术分:  805 分
等级:  
注册:  2009-09-07 06:37:23



发表于:2010-06-10 16:39:24
          楼主

导出目录结构

如果说统计文档页数是文档统计操作中最常用的操作,那么导出文档目录结构就是在文档导出操作中最常用的操作,通过TablesOfContents类的Add方法可以导出文档的目录结构,Add方法的语法如下:

LPDISPATCH TablesOfContents::Add(LPDISPATCH Range, VARIANT* UseHeadingStyles, VARIANT* UpperHeadingLevel, VARIANT* LowerHeadingLevel, VARIANT* UseFields, VARIANT* TableID, VARIANT* RightAlignPageNumbers, VARIANT* IncludePageNumbers, VARIANT* AddedStyles, VARIANT* UseHyperlinks, VARIANT* HidePageNumbersInWeb)

参数说明如表1所示。

1                Add方法的参数说明

参数

描述

Range

插入目录的Range对象。

UseHeadingStyles

使用制表符前导符,设为TRUE

UpperHeadingLevel

顶级目录,通常设为1

LowerHeadingLevel

底级目录,根据需要赋值

UseFields

使用区域,设为FALSE

TableID

目录索引,以1起始

RightAlignPageNumbers

页码右对齐,设为TRUE

IncludePageNumbers

包含页码

AddedStyles

增加类型,设为NULL

UseHyperlinks

使用超链接,设为TRUE

HidePageNumbersInWeb

Web页中隐藏页码,设为TRUE

下面通过实例来看一下,如何导出Word文档的目录结构,步骤如下:

1)创建一个基于对话框的应用程序,设置对话框标题为“导出Word文档目录结构”。

2)向对话框中添加一个静态控件、一个编辑框控件和一个按钮控件。界面布局如图1所示。




 

1  界面设计

3)在应用程序类(CDirectoryOutApp)的InitInstance函数中初始化COM环境,代码如下。

::CoInitialize(NULL);

4)按<Ctrl+W>组合键打开类向导,向工程中添加_Application类、Documents类和_Document类。并为控件关联变量,如图2所示。




2  类向导

5)在CCountSpaceDlg类中应用需要使用的头文件,代码如下。

#include "msword9.h"

#include "atlbase.h"

#include <comdef.h>

6)处理“选择目录”按钮的单击事件,在该事件的处理函数中,通过文件打开对话框获得选择的Word文档路径,并将打开文档,计算空格数量,代码如下。

void CDirectoryOutDlg::OnButout()

{

        CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,

                "All Files(*.doc)|*.doc||",AfxGetMainWnd());                                         //构造文件打开对话框

        CString strPath;                                                                                                          //声明变量

        if (dlg.DoModal() == IDOK)                                                                            //判断是否按下"打开"按钮

        {

                strPath = dlg.GetPathName();                                                                   //获得文件路径

                m_Path.SetWindowText(strPath);                                                   //显示文件路径

                _Application app; 

                Documents docs,ndocs;

                _Document doc,ndoc;

                Range range,nrange;

                Selection sel,nsel;

                TablesOfContents tocs;

                CComVariant a (_T(strPath)),b(false),c(0),d(true),e(_T(""));

                //初始化连接

                app.CreateDispatch("word.Application");

                docs.AttachDispatch(app.GetDocuments());

                doc.AttachDispatch(docs.Add(&a,&b,&c,&d));

                sel.AttachDispatch(app.GetSelection());

                range.AttachDispatch(sel.GetRange());

                tocs.AttachDispatch(doc.GetTablesOfContents());

                tocs.Add(range,&_variant_t(true),&_variant_t((long)1),&_variant_t((long)2)

                        ,&_variant_t(false),&_variant_t(""),&_variant_t(true),&_variant_t(true)

                        ,&_variant_t(""),&_variant_t(false),&_variant_t(false));                 //导出目录

                Paragraphs pgraphs;

                pgraphs.AttachDispatch(doc.GetParagraphs());

 

                CString szText = "";

                long pgraphCount = pgraphs.GetCount();                                      //段落数

                for (long i = 1; i<= pgraphCount; i++)

                {

                        Paragraph pgraph;

                        pgraph.AttachDispatch(pgraphs.Item(i));

                        Range pragRange;

                        pragRange.AttachDispatch(pgraph.GetRange());                    //获得选区

                        _ParagraphFormat format;

                        format.AttachDispatch(pragRange.GetParagraphFormat());

                        CComVariant value;

                        Style style;

                        value = format.GetStyle();                                                                //获得格式

                        style.AttachDispatch(value.pdispVal);

                        CString szHeaderName = style.GetNameLocal();

                        char  szName[10] = {0};

                        strncpy(szName, szHeaderName.GetBuffer(0), 6);

                        szHeaderName.ReleaseBuffer(0);

                        if (strcmp(szName, "目录 1") != 0 && strcmp(szName, "目录 2") != 0

                                && strcmp(szName, "目录 3") != 0)                             //如果是目录格式

                        {

                                sel.SetRange(0,i);

                                range.AttachDispatch(sel.GetRange());                                    //获得区域

                                CString str = range.GetText();                                                   //获得文本

                                range.Cut();                                                                                         //剪切

                                nrange.AttachDispatch(doc.GetContent());                    //设置选区

                                nrange.Paste();                                                                                    //粘贴

                                i = pgraphCount + 1;

                        }

                        pgraph.ReleaseDispatch();

                        pragRange.ReleaseDispatch();

                        format.ReleaseDispatch();

                        style.ReleaseDispatch();

                }

                app.SetVisible(true);

                range.ReleaseDispatch();

                nrange.ReleaseDispatch();

                doc.ReleaseDispatch();

                docs.ReleaseDispatch();

                app.ReleaseDispatch();

        }

}

运行程序,效果如图3所示。



3 运行结果

导出效果如图4所示。



4  导出目录结构

 

 

 

 

 

本帖赏分:0 分   回复数:0 篇     下载附件
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页