Word Process Using OLE Automation

2024-02-10 06:08

本文主要是介绍Word Process Using OLE Automation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Word Process Using OLE Automation

使用OLE Automation 自动化程序的接口,提取word文本及其格式,word抓图等;

WORD的type library  /Program   Files/Microsoft   Office/Office/MSWORD9.OLB

 

// WORD文本及格式提取

void CWordOffice::Process()
{
    m_ListPage.RemoveAll();
    m_wdDoc.Select();
    Selection Sel = m_wdApp.GetSelection();
    long lCurrentStart = Sel.GetStart();
    long lCurrentEnd = Sel.GetEnd();
    long lDocumentEnd=Sel.GetEnd();
    Range range;
    int mIndex=0,pageNo =0;

    PAGENODE pageNode;
    pageNode.pageNo = pageNo;
    range = m_wdDoc.Range (
                COleVariant(lCurrentStart),COleVariant(lCurrentEnd));
    Paragraphs paragraphs = range.GetParagraphs();

    Paragraph paragraph;
    float fontSize = 12;
    long bold = 0;
    long italic = 0;
    long color    = 0;
    CString str;
    _Font font;
    bool bTitle = false;
    static long WHITE_COLOR = RGB(255,255,255);
    long lParag = paragraphs.GetCount();
    CTextNodeList textNodeList;
    for (int i=1;i<=lParag;i++)
    {
        paragraph = paragraphs.Item(i);
        Range paraRange = paragraph.GetRange();
        CString strText = paraRange.GetText();
        //strText.TrimRight();
        // TODO
        // If remove empty lines
        if (IsEmptyLine(strText) && m_nFilterEmptyLine)
            continue;
        strText.Replace(_T("/r/n"),_T("/n"));
        strText.Replace(_T("/r"),_T("/n"));
        if (strText.GetLength()-1!=strText.ReverseFind(_T('/n')))
        {
            strText += _T('/n');
        }

        font = paraRange.GetFont();   
        // font size
        float size = font.GetSize();
        // font bold
        bold    = font.GetBold();
        italic    = font.GetItalic();
        color    = font.GetColor();
        bold    = bold ? 1 : bold;
        italic    = italic ? 1 : italic;

 

        // if there're more than 1 font, 9999 returned.
        if (font.m_lpDispatch && size <1000)
            fontSize = size;
        font.ReleaseDispatch();
        paraRange.ReleaseDispatch();
        paragraph.ReleaseDispatch();

        if (m_nFilterWhiteChar && color==WHITE_COLOR)
            continue;

        TEXTNODE *lastNode = NULL;
        if (textNodeList.GetSize()>0)
        {
            lastNode = &textNodeList[textNodeList.GetSize()-1];
        }

        bool bCat = false;
        if (lastNode)
        {
            bCat = CatText (
                lastNode->text,lastNode->size, lastNode->bold,
                lastNode->italic,strText,fontSize,bold,italic,m_nCatFlag,
                lastNode->text_sec
                );
            if (bCat)
            {
                ++lastNode->num;
                lastNode->text_sec = strText;
            }
        }

        if ( !lastNode || !bCat)
        {
            TEXTNODE textNode;
            textNode.text = strText;
            textNode.type = NODETYPE_CONTENT;
            textNode.size = size;
            textNode.bold = bold;
            textNode.italic = italic;
            textNodeList.Add(textNode);
        }
    }
    FilterArticle(&pageNode.articleList,&textNodeList);

    paragraphs.ReleaseDispatch();
    range.ReleaseDispatch();

    m_ListPage.Add(pageNode);    // Add PageNode to Page List
    WriteArticleToXML();
}

 

// 抓图
//-------------------------------------------------
    range.CopyAsPicture();
     
    ::OpenClipboard(NULL); //打开剪贴板
    HANDLE hClip=::GetClipboardData(CF_ENHMETAFILE);//图元文件
    HENHMETAFILE hEnhMetaFile=(HENHMETAFILE)hClip;
    CString strN="";
    strN.Format("-w%d",mIndex++);
    HENHMETAFILE hMetaFile=CopyEnhMetaFile(hEnhMetaFile,(LPCTSTR)(strN+".emf"));
    DeleteEnhMetaFile(hMetaFile);
    EmptyClipboard();//清空剪贴板
    CloseClipboard();//关闭剪贴板
//-------------------------------------------------

这篇关于Word Process Using OLE Automation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/696318

相关文章

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

C#实现插入与删除Word文档目录的完整指南

《C#实现插入与删除Word文档目录的完整指南》在日常的办公自动化或文档处理场景中,Word文档的目录扮演着至关重要的角色,本文将深入探讨如何利用强大的第三方库Spire.Docfor.NET,在C#... 目录Spire.Doc for .NET 库:Word 文档处理利器自动化生成:C# 插入 Word

Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)

《Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)》在职场中,Word文档是公认的好伙伴,但你有没有被它折磨过?批量生成合同、制作报告以及发放证书/通知等等,这些重复、低效... 目录重复性文档制作,手动填充模板,效率低下还易错1.python-docx入门:Word文档的“瑞士

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的