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

相关文章

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

如何Python使用设置word的页边距

《如何Python使用设置word的页边距》在编写或处理Word文档的过程中,页边距是一个不可忽视的排版要素,本文将介绍如何使用Python设置Word文档中各个节的页边距,需要的可以参考下... 目录操作步骤代码示例页边距单位说明应用场景与高级用China编程途小结在编写或处理Word文档的过程中,页边距是一个

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx