上一篇文章主要讲了从word底层xml中获取表格和标题的方法,但是存在一个问题:word文件必须是docx格式的。如果为doc格式的,可以有两种解决方案:

一、把doc文件转换成docx格式文件,用上一种办法来处理

二、利用com组件和word的标签机制去处理

下面直接贴代码:

1)获取表格数据

 void MyWord::getTableData( const int index, QVector<QVector<QString> > &vec )
{
m_word = new QAxObject(parent);
if(!m_word->setControl("Word.Application"))
{
QMessageBox::warning(, tr("警告"), tr("绑定word控件失败"), tr("确定"));
return ;
}
m_word->setProperty("Visible", false); //设置窗体不可见
m_word->setProperty("DisplayAlerts", false); //不现实警告信息 m_documents = m_word->querySubObject("Documents");
m_documents->dynamicCall("Open(const QString &)", filename); //打开文件
m_document = m_word->querySubObject("ActiveDocument"); //获取当前被激活的文档 QAxObject *table = m_document->querySubObject("Tables(int)", index); //获取表格
if(!table)
{
return ;
}
int rowCnt = table->querySubObject("Rows")->property("Count").toInt(); //行数
int colCnt = table->querySubObject("Columns")->property("Count").toInt(); //列数
for(int nR = ; nR <= rowCnt; ++nR)
{
QVector<QString> tmpVec;
for(int nC = ; nC <= colCnt; ++nC)
{
QAxObject *cell = table->querySubObject("Cell(int, int)", nR, nC);//每一个单元格
if(!cell)
{
tmpVec.push_back("");
continue;
}
QString text = cell->querySubObject("Range")->property("Text").toString();//获取单元格文本
tmpVec.push_back(text.remove(text.size() - , ));//去除文本的换行符
}
vec.push_back(tmpVec);
}
}

2)读取标签相关区域文本

QString MyWord::getTextFromBookmark( const int index /*= 1*/ )
{
if(index < || index > getBookmarkCount() && !m_document)
{
return "";
} QAxObject *bookmark = m_document->querySubObject("Bookmarks(int)", index);
if(bookmark)
{
QAxObject *range = bookmark->querySubObject("Range");
if(range)
{
return range->property("Text").toString();
}
}
return "";
} QString MyWord::getTextFromBookmark( const QString &bookmarkName )
{
if(!m_document)
{
return "";
} QAxObject *bookmark = m_document->querySubObject("Bookmarks(const QString &)", bookmarkName);
if(bookmark)
{
QAxObject *range = bookmark->querySubObject("Range");
if(range)
{
return range->property("Text").toString();
}
}
return "";
}

3)如何插入标签

选中要插如标签的文本,word插入->标签,按照提示操作即可

从一个word文件中读取所有的表格和标题(2)的更多相关文章

  1. 从一个word文件中读取所有的表格和标题(1)

    首先讲需求: 从word文件中读表格里的数据,然后插入数据库中.word文件中的表格是带有标题的,把标题读出来,进行匹配数据库. 需求分析: word2007底层是以xml文件存储的,所以分析xml的 ...

  2. 编写Java程序,在硬盘中选取一个 txt 文件,读取该文档的内容后,追加一段文字“[ 来自新华社 ]”,保存到一个新的 txt 文件内

    查看本章节 查看作业目录 需求说明: 在硬盘中选取一个 txt 文件,读取该文档的内容后,追加一段文字"[ 来自新华社 ]",保存到一个新的 txt 文件内 实现思路: 创建 Sa ...

  3. 条形码的应用三-----------从Excel文件中读取条形码

    条形码的应用三------从Excel文件中读取条形码 介绍 上一篇文章,我向大家展示了生成多个条形码并存储到Excel文件中的一个方法.后来我又有了个想法:既然条码插入到excel中了,我可不可以从 ...

  4. 【jacob word】使用jacob,合并多个word为一个word文件

    将几个word文件合并到一个word文件,使用注意点: 1.后面附项目运用的jar包jacob-1.9, 2.并且jacob运用中,需要将附件内的jacob.dll放到windows/system32 ...

  5. java:利用java的输入/输出流将一个文件的每一行+行号复制到一个新文件中去

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  6. Java将对象保存到文件中/从文件中读取对象

    1.保存对象到文件中 Java语言只能将实现了Serializable接口的类的对象保存到文件中,利用如下方法即可: public static void writeObjectToFile(Obje ...

  7. 从PCD文件中读取点云数据

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=84 在本小节我们学习如何从PCD文件中读取点云数据. 代码 章例1文件夹中, ...

  8. 【Python】从文件中读取数据

    从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 ...

  9. Python自动化测试框架——数据驱动(从文件中读取)

    学过编程的伙伴们都知道,数据不仅可以从代码中读取,还可以从文件中读取. 今天小编就简要的介绍一下从文件中读取数据,并应用到自动化测试中方法. 先来展示下接下来将要用到的文件在项目中的结构 从txt文件 ...

随机推荐

  1. php获取当前月与上个月月初及月末时间戳的方法

    php 获取今日.昨日.上周.本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime.下面首先还是直奔主题以示例说明如何使用 mktime 获取今日.昨日.上周.本月的起始 ...

  2. poj 1064 Cable master 判断一个解是否可行 浮点数二分

    poj 1064 Cable master 判断一个解是否可行 浮点数二分 题目链接: http://poj.org/problem?id=1064 思路: 二分答案,floor函数防止四舍五入 代码 ...

  3. Cesium中Clock控件及时间序列瓦片动态加载

    前言 前面已经写了两篇博客介绍Cesium,一篇整体上简单介绍了Cesium如何上手,还有一篇介绍了如何将Cesium与分布式地理信息处理框架Geotrellis相结合.Cesium的强大之处也在于其 ...

  4. JAVA字符串转换MD5值

    简介: MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5 ...

  5. Sql Server 的服务器类型

    Sql Server 提供了四种服务器类型: 如图所示  : 1, 数据库引擎  2, Analysis Services (分析服务 )  3, Reporting  Services (报告服务) ...

  6. UITableView使用过程中可能遇到的问题

    前言:记录一些UITableView使用过程中可能遇到的问题 环境:Xcode9 解决UITableViewStyleGrouped类型的TableView的cell距离顶部有距离的问题: table ...

  7. Zookeeper 集群安装

    负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据[均匀]分摊到多个操作单元上执行,负载均衡的关键在于[均匀].常见互联网分布式架构如上,分为客户端 ...

  8. jsp获取parameter乱码

    String StaffName = new String(request.getParameter("StaffName").getBytes("iso-8859-1& ...

  9. centos 6.5 安装mongodb2.6

    前言: 系统版本号:Centos-6.5-x86_64 *** Centos编译安装mongodb 2.6 系统最好是64位的,才干更好发挥mongodb的性能 1.准备,下载源文件(二进制编译版) ...

  10. x86 处理器开机顺序

    无论是千万行的linux ,还是百万行的uefi ,或者百十行的app, 它都有一个主线.应用程序是main() 函数里面全部函数运行完,程序结束.这里main() 做为程序的起点,uefi 能够觉得 ...