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中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

Excel和Word日常使用记录:

Excel使用总结 表格颜色填充: 合并单元格: 选中你要合并的单元格区域。按下快捷键 Alt + H,然后松开这些键。再按下 M,接着按 C。这个组合键执行的操作是:Alt + H:打开“主页”选项卡。M:选择“合并单元格”选项。C:执行“合并并居中”操作。 插入行: 在Excel中,插入一行的快捷键是:Windows:选择整行(可以点击行号)。按下 Ctrl + Sh

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决 问题描述 最近在投一篇期刊论文,直接提交word文档,当时没有查看提交预览,一审审稿意见全是:公式乱码、公式乱码、乱码啊!!!是我大意了,第二次提交,我就决定将word文档转成PDF后再提交,避免再次出现公式乱码的问题。接着问题又来了,我利用‘文件/导出’或‘文件/另存为’的方式将word转成PDF后,发现公式

【信创建设】信息系统信创建设整体技方案(word原件完整版)

信创,即“信息技术应用创新”。我国自主信息产业聚焦信息技术应用创新,旨在通过对IT硬件、软件等各个环节的重构,基于我国自有IT底层架构和标准,形成自有开放生态,从根本上解决本质安全问题,实现信息技术可掌控、可研究、可发展、可生产。信创发展是一项国家战略,也是当今形势下国家经济发展的新功能。信创产业发展已经成为各行各业数字化转型、提升产业链发展的关键。 软件全套资料部分文档清单: 工作安排任

.net MVC 导出Word--思路详解

序言:          一般在项目的开发过程中,总会接收到一个个需求,其中将数据转换成Work来下载,是一个很常见的需求;          那么,我们改如何处理这种需求,并输出实现呢?          在做的过程中,去思考 1、第一步:首先确认,Work的存在位置,并创建字符输出路:             //在的项目中创建一个存储work的文件夹             string