精华内容
下载资源
问答
  • 这不是源代码,是通过C#在VS2010下实现的,可以说是个小工具,实现的功能是:打开某一文件下的所有word文档,然后设置一个或多个关键字,然后查找这些关键字是否在word中出现,并将word文档名和关键字保存在excel的...
  • 具体的工作需求:在指定的Word文档(*.doc文件/*.docx文件)中查找关键字,找到后做高亮操作或者直接删除操作,然后另存为别的目录(表示这个文件被操作过了)。 这个功能很简单,确实挺简单,但由于是第一次用...

    最近由于项目需要,要用QT操作Word文档。具体的工作需求:在指定的Word文档(*.doc文件/*.docx文件)中查找关键字,找到后做高亮操作或者直接删除操作,然后另存为到别的目录(表示这个文件被操作过了)。

     

    这个功能很简单,确实挺简单,但由于是第一次用QT操作Word文档,所以仍需要经过一番查找资料。网上用QT操作Word文档的资料不是很多(可能是我没找对地方),所以经过了一段时间的碰壁之后(没有现成的,哪怕是半成品),我决定还是从源头看起:

      1.查看帮助文档:Microsoft Word Visual Basic参考.chm。这是操作Word文档的VBA接口文档

      2.查看官方网站的帮助文档:https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word?view=word-pia

        “查找”在这:https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.find.hithighlight?view=word-pia#Microsoft_Office_Interop_Word_Find_HitHighlight_System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__System_Object__

     

    要想用QT操作office文档,就要用到QAxWidget类和QAxObject类首先要在pro文件中配置一个模块“qaxcontainer”,也就是添加一行代码,即:

      CONFIG += qaxcontainer

    在找到关键字之后,我还保存了一些数据:文件名、文件所在的路径、关键字所处的位置。如果你不需要这些数据,可以删减掉。

    QList<QString> fileNameList;    // 保存文件名
    QList<QString> filePathList;    // 保存文件路径
    QList<QStringList> keyWordsPositionList;    // 保存关键字所在位置

    首先介绍一个函数,这个函数通过正则表达式用来定位关键字所处在的语句。这个函数会在后面的高亮操作函数和直接删除函数里调用到:

    // 查找关键字的位置
    // fileContent:文件内容;keyWord:关键字
    QStringList findKeyWordsPosition(QString fileContent, QString keyWord)
    {
        QStringList resList;
        if (fileContent.contains(keyWord)){
            qDebug() << QObject::tr("包含子字符串 : %1").arg(keyWord);
    
            int startIndex = 0;
    //        int count = 0;
            int keyWordsLen = keyWord.length();
            QRegExp rx(QObject::tr("[,。:\r]?([^,。:\r]*(%1)[^,。:\r]*)[,。:\r]?").arg(keyWord));
    
            while ((startIndex = rx.indexIn(fileContent, startIndex)) != -1){
                QString resStr = rx.cap(1).mid(0);   // 提取子字符串所在的语句
                if (resStr.contains("\r"))
                    resStr.replace("\r", "");
                resList << resStr;
    
                // 找到子字符串
                int findIndex = fileContent.indexOf(keyWord, startIndex);
    //            qDebug() << QObject::tr("keyWords 出现的位置 : %1").arg(findIndex);
                startIndex = findIndex + keyWordsLen;
    //            qDebug() << QObject::tr("keyWords 出现的次数 : %1").arg(++count);
                qDebug() << "\n";
            }
    
            return resList;
        }
        return resList << "";
    }

    首先是高亮操作函数:

     

    // 高亮操作函数
    //
    dirName:是待检查文件的路径;keyWords:是要查找的关键字(查找的关键字可能是多个) bool highLightKeyWordsinWordFile(QString dirName, QStringList keyWords) { int lastSeparatorIndex = dirName.lastIndexOf(QDir::separator()); QString saveAsFilePath = storeDir + dirName.mid(lastSeparatorIndex+1); // 另存为的路径 QAxWidget wordApplication("Word.Application"); QAxObject *documents = wordApplication.querySubObject("Documents"); documents->dynamicCall("Open(const QString&)", dirName); wordApplication.setProperty("Visible", QVariant(false)); QAxObject* m_doc = wordApplication.querySubObject("ActiveDocument"); // 获取当前工作簿 QAxObject* pRange = m_doc->querySubObject("Content()"); if (NULL != pRange) { // 查找关键字 QAxObject *pFind = pRange->querySubObject("Find()"); QStringList keyWordsPosition; if (NULL != pFind) { pFind->dynamicCall("ClearFormatting()"); pFind->setProperty("Format", true); pFind->setProperty("MatchCase", false); pFind->setProperty("MatchWholeWord", false); pFind->setProperty("MatchByte", true); pFind->setProperty("MatchWildcards", false); pFind->setProperty("MatchSoundsLike", false); pFind->setProperty("MatchAllWordForms", false); for (int i=0; i<keyWords.size(); ++i){ // 找到关键字所在的位置,得到一个position,将position添加到keyWordsPosition中。 QString keyWord = keyWords.at(i); QStringList position = findKeyWordsPosition(pRange->property("Text").toString(), keyWord); if (!position.contains("")){ keyWordsPosition << position; pFind->setProperty("Text", keyWord); pFind->dynamicCall("Execute()"); while (pFind->property("Found").toBool()) { bool isHighlight = pFind->parent()->setProperty("HighlightColorIndex","wdYellow"); pFind->dynamicCall("Execute()"); if (!isHighlight) { delete pFind; pFind = NULL; delete pRange; pRange = NULL; m_doc->dynamicCall("Close(boolean)", true); wordApplication.dynamicCall("Quit ()"); delete m_doc; m_doc = NULL; return false; } } } } } if (keyWordsPosition.size() >= 1){ QString fileName = dirName.mid(lastSeparatorIndex+1); QString filePath = dirName.mid(0, lastSeparatorIndex+1); fileNameList << fileName; filePathList << filePath; keyWordsPositionList << keyWordsPosition; m_doc->dynamicCall("SaveAs(const QString)", saveAsFilePath); } delete pFind; pFind = NULL; delete pRange; pRange = NULL; m_doc->dynamicCall("Close(Boolean)", true); m_doc->dynamicCall("Quit()"); delete m_doc; m_doc = NULL; return true; } return true; }

    下面这个是直接删除操作函数

    // dirName:是待检查文件的路径;keyWords:是要查找的关键字(查找的关键字可能是多个)
    bool directDeleteKeyWordsinWordFile(QString dirName, QStringList keyWords)
    {
        int lastSeparatorIndex = dirName.lastIndexOf(QDir::separator());
        QString saveAsFilePath = storeDir + dirName.mid(lastSeparatorIndex+1);        // 另存为的路径
    
        QAxWidget wordApplication("Word.Application");
        QAxObject *documents = wordApplication.querySubObject("Documents");
        documents->dynamicCall("Open(const QString&)", dirName);
        wordApplication.setProperty("Visible", QVariant(false));
        QAxObject* m_doc = wordApplication.querySubObject("ActiveDocument");    // 获取当前工作簿
        QAxObject* pRange = m_doc->querySubObject("Content()");
        QList<QVariant> vars;
    
        if (NULL != pRange)
        {
            // 查找关键字
            QAxObject *pFind = pRange->querySubObject("Find()");
            QStringList keyWordsPosition;
            if (NULL != pFind)
            {
                pFind->dynamicCall("ClearFormatting()");
                QAxObject *replacement = pFind->querySubObject("Replacement()");
                replacement->dynamicCall("ClearFormatting()");
    
                for (int i=0; i<keyWords.size(); ++i){
                    QString keyWord = keyWords.at(i);
                    // 找到关键字所在的位置,得到一个position,将position添加到keyWordsPosition中。
                    QStringList position = findKeyWordsPosition(pRange->property("Text").toString(), keyWord);
                    if (!position.contains("")){
                        keyWordsPosition << position;
                        vars << keyWord << false << false << false << false
                             << false << true << 1<< false << ""
                             << 2 << false << false << false << false; // wdReplaceNone-->0;wdReplaceAll-->2;wdReplaceOne-->1
                        bool isReplaced = pFind->dynamicCall("Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, "
                                                            "MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, "
                                                            "Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)", vars).toBool();
                        if (!isReplaced){
                            delete pFind;
                            pFind = NULL;
                            delete pRange;
                            pRange = NULL;
                            m_doc->dynamicCall("Close(Boolean)", true);
                            m_doc->dynamicCall("Quit()");
                            delete m_doc;
                            m_doc = NULL;
                            QMessageBox openFileError(QMessageBox::Warning,
                                                      QObject::tr("文件处理错误"),
                                                      QObject::tr("文件 %1 处理错误,是否继续检查其他文件?").arg(dirName));
                            openFileError.addButton(QMessageBox::Yes);
                            openFileError.addButton(QMessageBox::No);
                            openFileError.setDefaultButton(QMessageBox::Yes);
                            if (openFileError.exec() == QMessageBox::No)
                                return false;
                        }
    
                    }
                }
            }
            if (keyWordsPosition.size() >= 1){
                QString fileName = dirName.mid(lastSeparatorIndex+1);
                QString filePath = dirName.mid(0, lastSeparatorIndex+1);
                fileNameList << fileName;
                filePathList << filePath;
                keyWordsPositionList << keyWordsPosition;
    
                m_doc->dynamicCall("SaveAs(const QString)", saveAsFilePath);
            }
            delete pFind;
            pFind = NULL;
            delete pRange;
            pRange = NULL;
            m_doc->dynamicCall("Close(Boolean)", true);
            m_doc->dynamicCall("Quit()");
            delete m_doc;
            m_doc = NULL;
            return true;
         }
        return false;
    }

     

    好了,以上代码可能无法正常运行,因为缺少一些变量的定义、头文件的包含,我觉得这些你自己添加是完全OK的^-^。

     

    因为自己需要的时候找不到资源,如果你也在找相似的资料,能给你带来帮助,我的目的就达到了,哈哈

     

    我发现在网上下载Word VBA和Excel VBA帮助文档的时候需要金币什么的,很不方便。在此我还将Word VBA和Excel VBA帮助文档的百度网盘下载链接放在这里,供大家下载:

    链接: https://pan.baidu.com/s/1-KTGdEVz_4C3yp_SBNlkIw 提取码: ri4p

    有不足的地方,请指正。

     

    转载于:https://www.cnblogs.com/Amos-haoxh/p/10859357.html

    展开全文
  • 自己新建word文档或者其它markdown文档放D:\Program Files (x86)\XYPlorer\Data\NewItems目录下 检查XYplorer配置 此时会打开一个名字为 xyplorer.ini的配置文件 通过查找:CEA_ListRightClickOnWhite 关键字,将...

    将模版放到指定的文件夹下

    自己新建word文档或者其它markdown文档放到D:\Program Files (x86)\XYPlorer\Data\NewItems目录下

    image-20210526112515518

    检查XYplorer配置

    image-20210526113128005

    此时会打开一个名字为 xyplorer.ini的配置文件

    通过查找:CEA_ListRightClickOnWhite 关键字,将其值设置为:1

    如下:CEA_ListRightClickOnWhite=1

    image-20210526113216925

    重启XYplorer

    打开XYplorer软件 点击文件选重启不保存,这样的目的是让配置生效.

    image-20210526112909286

    验证效果

    在XYplorer右键新建的时候发现就都有了.

    image-20210526113300863

    展开全文
  • 搜索引擎设计软件程序源码+数据库+WORD毕业设计论文文档. 经过对搜索引擎的研究同时与Lucene自身的特性相结合,搜索引擎的设计与实现需要实现的功能阐述如下: (1)支持桌面文件搜索,格式包括txt、doc、xls和ppt; ...
  • 该工具可以在指定文件夹下所有Word、Excel和TXT文档中批量查找指定关键字(也可同时指定多个关键字),第一次搜索速度稍慢,但是该工具会对查找过的文件建立索引,再次搜索速度极快。 该工具支持2007版本以上的文档...
  • 该工具可以在指定文件夹下所有Word、Excel和TXT文档中批量查找指定关键字(也可同时指定多个关键字),第一次搜索速度稍慢,但是该工具会对查找过的文件建立索引,再次搜索速度极快。 该工具支持2007版本以上的文档...
  • 该工具可以在指定文件夹下所有Word、Excel和TXT文档中批量查找指定关键字(也可同时指定多个关键字),第一次搜索速度稍慢,但是该工具会对查找过的文件建立索引,再次搜索速度极快。 该工具支持2007版本以上的文档...
  • oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
  • 该工具可以在指定文件夹下所有Word、Excel和TXT文档中批量查找指定关键字(也可同时指定多个关键字),第一次搜索速度稍慢,但是该工具会对查找过的文件建立索引,再次搜索速度极快。 该工具支持2007版本以上的文档...
  • 1、该工具可以在指定文件夹下所有Word、Excel和文本文档中批量查找指定关键字(也可同时指定多个关键字)。第一次搜索速度会稍慢,但是该软件会对查找过的文件建立索引,再次搜索时速度成倍提升! 2、该工具支持...
  • 1、该工具可以在指定文件夹下所有Word、Excel、PowerPoint、PDF和文本文档中批量查找指定关键字(也可同时指定多个关键字)。第一次搜索速度会稍慢,但是该软件会对查找过的文件建立索引,再次搜索时速度成倍提升! ...
  • 1、该工具可以在指定文件夹下所有Word、Excel和TXT文档中批量查找指定关键字(也可同时指定多个关键字)。第一次搜索速度会稍慢,但是该软件会对查找过的文件建立索引,再次搜索时速度成倍提升! 2、该工具支持...
    • 工具名称:DocSearch 文档内容搜索器 v1.4

    • 工具介绍
      1、该工具可以在指定文件夹下所有Word、Excel和文本文档中批量查找指定关键字(也可同时指定多个关键字)。第一次搜索速度会稍慢,但是该软件会对查找过的文件建立索引,再次搜索时速度成倍提升!
      2、该工具支持Office2007版本以上的文档,解决了Windows自带的搜索工具对高版本Office文档内容经常搜索不到的问题。
      3、纯绿色软件,界面朴素,直观易用,免安装,无病毒,不联网,完全免费。
      4、应网友要求,v1.4版主要新增可自定义搜索文本文档扩展名列表功能,扩大软件的适用范围。

    • 界面截图
      在这里插入图片描述

    • 更新日志
      在这里插入图片描述

    • 本站下载链接《DocSearch 文档内容搜索器 v1.4》(CSDN)

    • 网盘下载链接《DocSearch 文档内容搜索器 v1.4》(网盘)

    展开全文
  • 1、该工具可以在指定文件夹下所有Word、Excel和TXT文档中批量查找指定关键字(也可同时指定多个关键字)。第一次搜索速度会稍慢,但是该软件会对查找过的文件建立索引,再次搜索时速度成倍提升! 2、该工具支持...
    • 工具名称:DocSearch 文档内容搜索器 v1.3

    • 工具介绍
      1、该工具可以在指定文件夹下所有Word、Excel和TXT文档中批量查找指定关键字(也可同时指定多个关键字)。第一次搜索速度会稍慢,但是该软件会对查找过的文件建立索引,再次搜索时速度成倍提升!
      2、该工具支持Office2007版本以上的文档,解决了Windows自带的搜索工具对高版本Office文档内容经常搜索不到的问题。
      3、纯绿色软件,界面朴素,直观易用,免安装,无病毒,不联网,完全免费。
      4、之前一直在本人电脑上自用。

    • 界面截图
      在这里插入图片描述

    • 更新日志
      在这里插入图片描述

    • 网盘下载链接《DocSearch 文档内容搜索器 v1.3》(网盘)

    • 本站下载链接《DocSearch 文档内容搜索器 v1.3》(CSDN)

    展开全文
  • 1、该工具可以在指定文件夹下所有Word、Excel和文本文档中批量查找指定关键字(也可同时指定多个关键字)。第一次搜索速度会稍慢,但是该软件会对查找过的文件建立索引,再次搜索时速度成倍提升! 2、该工具支持...
  • 4. 标题瞬间搜索和全文快速搜索:支持“a b .doc”查找同时包括a和b 关键字word文档等 5. 集成google桌面搜索 二、针式PKM 和 Evernote、Wiz、mybase等笔记软件是互补类的软件,建议同时使用; 因为针式PKM 主要...
  • 对多个WORD文档执行替换,包含正文、页眉和页脚。同时还支持多个关键字替换,例如将1替换成A,将2替换成B,将3替换成C...... 段落缩进 让指定的段落首行缩进俩字符。 中英互译 对选区的字符执行中译英、英译中操作.....
  • 而PdmReader则可以最迅速快捷的找到您想要查找到的表结构信息,简单输入关键字查找即可得到结果。当然,当您的pdm(*.pdm)数据字典文件发生变更后,PdmReader会自动提出重新读取该pdm数据字典文件,以达到实时最新,使...
  • Oracle全文检索.rar

    2019-07-09 08:15:42
    Oracle text 需要为可检索的数据项建立索引,用户才能够通过搜索查找内容,索引进程是根据管道建模的,在这个管道中,数据经过一系列的转换后,将其关键字会添加索引中。该索引进程分为多个阶段,如下图 ......
  • 基于DFA模型的多关键字查找 hutool-extra 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) hutool-http 基于HttpUrlConnection的Http客户端封装 hutool-log 自动识别日志实现...
  • 《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。全书分6篇共25章,主要...
  •  实例142 身份证号从15位升18位的算法 186  实例143 歌德巴赫猜想的算法实现 187  实例144 八皇后问题的算法实现 188  实例145 百钱百鸡的算法实现 190  实例146 韩信点兵的算法实现 191  实例147 实现...
  • 而PdmReader则可以最迅速快捷的找到您想要查找到的表结构信息,简单输入关键字查找即可得到结果。当您的pdm(*.pdm)数据字典文件发生变更后,PdmReader会自动提出重新读取该pdm数据字典文件,以达到实时最新,使查询...
  • 而PdmReader则可以最迅速快捷的找到您想要查找到的表结构信息,简单输入关键字查找即可得到结果。当您的pdm(*.pdm)数据字典文件发生变更后,PdmReader会自动提出重新读取该pdm数据字典文件,以达到实时最新,使查询...
  • @AtachmentNames 返回附加到文档中的文件的操作系统文件名 @Attachments 返回附加到文档中的文件数目 @Author 返回包含文档姓名的文本列表 @Begins 确定一个指定的子串是否保存在另一个字符串的开头 @Certificate 从...
  • 实例097 改变长度删除数组中的元素 实例098 删除数组元素后改变其长度 4.2 常用数组排序算法 实例099 使用选择排序法对一维数组进行排序 实例100 使用冒泡排序法对一维数组进行排序 实例101 使用快速排序法...
  • 实例097 改变长度删除数组中的元素 实例098 删除数组元素后改变其长度 4.2 常用数组排序算法 实例099 使用选择排序法对一维数组进行排序 实例100 使用冒泡排序法对一维数组进行排序 实例101 使用快速排序法...
  • 实例097 改变长度删除数组中的元素 实例098 删除数组元素后改变其长度 4.2 常用数组排序算法 实例099 使用选择排序法对一维数组进行排序 实例100 使用冒泡排序法对一维数组进行排序 实例101 使用快速排序法...
  • 实例093 读取Word文档中表格数据SQL Server数据库 211 实例094 将Word文档转换为HTML网页 实例095 在打印预览中显示Word文档 实例096 提取Word文档中的目录 实例097 在浏览器中访问Word文件 第4章 ASP.NET...
  • 实例093 读取Word文档中表格数据SQL Server数据库 211 实例094 将Word文档转换为HTML网页 实例095 在打印预览中显示Word文档 实例096 提取Word文档中的目录 实例097 在浏览器中访问Word文件 第4章 ASP.NET...
  • 本系列图书包括第I卷、第II卷共计1200个例子,本文档是第I卷,共计603个例子。本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 149
精华内容 59
关键字:

word文档查找不到关键字