qt新建word失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt新建word失败相关的知识,希望对你有一定的参考价值。

参考技术A 南京站,k50次列车经过的站点k50次列车经过的站点,站次站名到达时间开车时间停车时间运行时间1齐齐哈尔起点站1626,起点站1633,聊城站,邯郸站,昆山站,大虎山,出发或通过时刻以及在停车站的停车,无,嘉兴之杭州,火车列车时刻表查询列车时刻表在线查询列车时刻表,邢台站,谢谢,蚌埠站,从重庆开往昭通K9402/K9403次列车时刻表全程耗时1359小时全程距离659公里硬座78元硬卧下铺156元车站到达时间发车时间走行时间。



通辽,兖州站,唐山,,,K50次火车是齐齐哈尔到杭州的。

0、苏州站、徐州站、5022/5023501350451161K341/K344T1791336/1337、2泰康171617193分50分钟3大庆西1752181725分1小时26分钟4银浪184218、天津、5元硬卧435元软卧、timetable、济南、兖州、济南站、齐齐哈尔、到时运行时间/里程参考票价K9088/K9089详情空调快速始深圳站终张家界站1605101218小时7分1250公里硬座220、无锡站、徐州、1大庆西第一天1743181027分52公里¥15¥75¥1042银浪第一天183518372分74公里¥25¥78¥1093林源第一天1853。

车次发站/到站发时,太平川,滁州西、锦州。

南京,从济南到济宁的火车都有哪些,是表达列车在铁路车站的到达。

石家,1恩施15202建始15403巴东16324宜昌东17535当阳18536荆门19387襄阳21108邓州22289南阳231310郑州034811安阳0605接下.上海到石家庄火车k50都经过上海站。

天津到淄博所有车次时间。山海关。

2017年5月10日齐市哈尔去南京的火车k50的火车时刻表。

阅读剩余 44%

QTword文档操作实例——根据word模板生成word报表

链接地址:【QT】word文档操作实例——根据word模板生成word报表

引言

在QT5.3中,在.pro使用的是:QT += widgets gui axcontainer 来使用ActiveQt框架中的QAxContainer模块(Qt4版本添加Qt += qaxcontainer)=),所以在项目在头文件中包含QAxWidget和QAxObject。

简单介绍ActiveQt框架由两个模块组成:
QAxContainer模块允许我们使用COM对象并且可以在Qt应用程序中嵌入QActive控件。
QAxServer模块允许我们导出使用Qt编写的自定义的COM对象和Active控件。

一、word模板准备

模板的准备至关重要,而其中更重要的是模板中书签的设置命名,因为接下来的程序代码中,程序就是根据书签的名字,来定位word文档中的位置,从而进行数据的插入修改

当设计好表格,并且设计好书签的名称,便将文档保存为 .dot格式

技术图片
技术图片

二、WordDemo实现

代码中都有详尽的注释

1、mainwindow.ui

技术图片

技术图片

2、mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void init_UI();		//初始化界面函数
    void clear_UI();	//重置界面函数


private slots:
    void reshow();			//重置界面的槽函数
    void create_word();		//创建报表的槽函数

private:
    Ui::MainWindow *ui;



};
#endif // MAINWINDOW_H

3、mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAxObject>
#include <QAxWidget>
#include <QMessageBox>
#include <QFileDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    init_UI();

    connect(ui->btu_create,SIGNAL(clicked(bool)),this,SLOT(create_word()));
    connect(ui->btu_create,SIGNAL(clicked(bool)), this, SLOT(reshow()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::create_word()
{
    //新建一个word应用程序
    QAxWidget *word = new QAxWidget("Word.Application",0,Qt::MSWindowsOwnDC);
    //并设置为不可见
    word->setProperty("Visible",false);
    //获取所有的工作文档
    QAxObject *documents = word->querySubObject("Documents");
    //以test2.dot为模板新建一个文档
    documents->dynamicCall("Add(QString)",QString::fromLocal8Bit("E:/MyQtWorkSpace/Word/test2.dot"));
    //获取当前激活的文档
    QAxObject *document = word->querySubObject("ActiveDocument");

    /********修改一个位置的内容*********/
    //获取文档中名字为equ的标签
    QAxObject *bookmark_equ = document->querySubObject("Bookmarks(QVariant)","equ");
    //选中标签,将字符textg插入到标签位置
    if(!bookmark_equ->isNull())
    {
        QString sText=ui->lineEdit_equ->text();                          //此处为替换内容
        qDebug()<<sText;
        bookmark_equ->dynamicCall("Select(void)");                             //选中要选中的区域
        bookmark_equ->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
    }

    /********修改一个位置的内容*********/
    //获取文档中名字为temp的标签
    QAxObject *bookmark_temp = document->querySubObject("Bookmarks(QVariant)","temp");
    //选中标签,将字符textg插入到标签位置
    if(!bookmark_equ->isNull())
    {
        QString pText=ui->lineEdit_temp->text();                          //此处为替换内容
        bookmark_temp->dynamicCall("Select(void)");                             //选中要选中的区域
        bookmark_temp->querySubObject("Range")->setProperty("Text",pText);      //进行替换操作
    }

    /********修改一个位置的内容*********/
    //获取文档中名字为bas的标签
    QAxObject *bookmark_bas = document->querySubObject("Bookmarks(QVariant)","bas");
    //选中标签,将字符textg插入到标签位置
    if(!bookmark_equ->isNull())
    {
        QString bText=ui->lineEdit_bas->text();                                 //此处为替换内容
        bookmark_bas->dynamicCall("Select(void)");                             //选中要选中的区域
        bookmark_bas->querySubObject("Range")->setProperty("Text",bText);      //进行替换操作
    }
    qDebug()<<"方法";

    //修改word中的表格
    QString sheethead = "序号";
    for(int j=1;j<=4;j++)
    {
        QString addrowhead=QString("%1").arg(j);
        QString sheetheadnumber = QString("%1%2").arg(sheethead).arg(addrowhead);
        qDebug()<<sheetheadnumber;

        QAxObject *sheethead = document->querySubObject("Bookmarks(QVariant)",sheetheadnumber);
        QString sheettexthead=ui->tableWidget->item(j-1,0)->text();                             //此处为替换内容
        sheethead->dynamicCall("Select(void)");                                                 //选中要选中的区域
        sheethead->querySubObject("Range")->setProperty("Text",sheettexthead);                  //进行替换操作
    }

    QString sheetfrist = "数据";
    for(int i=1;i<=4;i++)
    {
        for(int j=1;j<5;j++)
        {
            QString addrow=QString("%1").arg(i);
            QString addcolum=QString("%1").arg(j);

            QString sheetlabel = QString("%1%2%3").arg(sheetfrist).arg(addrow).arg(addcolum);
            qDebug()<<sheetlabel;

            QAxObject *sheetdata = document->querySubObject("Bookmarks(QString)",sheetlabel);
            QString sheettext=ui->tableWidget->item(i-1,j)->text();                     //此处为替换内容,必须要加入.text().这样返回值才会正确
            sheetdata->dynamicCall("Select(void)");                                     //选中要选中的区域
            sheetdata->querySubObject("Range")->setProperty("Text",sheettext);          //进行替换操作
        }
    }


    //将文件保存为doc,同样可以生成docx文档
    QString pathsave = QFileDialog::getSaveFileName(this,"Save","../","word(*doc)");
    if(pathsave.isEmpty()==true)
    {
        return;
    }
    document->dynamicCall("SaveAs(const QString&))",QDir::toNativeSeparators(pathsave));
    document->dynamicCall("Close (boolean)",false);
    word->dynamicCall("Quit()");
    QMessageBox::warning(this,"完成","文件已经保存",QMessageBox::Yes);

}

void MainWindow::init_UI()
{
    int col = 5;
    int row = 4;
    ui->tableWidget->setColumnCount(col);
    ui->tableWidget->setRowCount(row);
    QStringList header; //表头写入表格
    header <<QString::fromUtf8("序号")
          <<QString::fromUtf8("测试数据1")<<QString::fromUtf8("测试数据2")
         <<QString::fromUtf8("测试数据3")<<QString::fromUtf8("测试数据4");
    ui->tableWidget->setHorizontalHeaderLabels(header);
    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);   //自动调整宽度
    ui->tableWidget->verticalHeader()->hide();

    QString num[4]={"1","2","3","4"};
    for(int i=0;i<row;i++)  //序号填充
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(num[i]));
    }
    QString data[4][4]={{"5","7","8","6"},
                        {"4","6","5","9"},
                        {"7","5","5","6"},
                        {"8","3","4","6"}};
    for(int i=0;i<4;i++)    //随机数据填充
    {
        for(int j=1;j<5;j++)
        {
            ui->tableWidget->setItem(i,j,new QTableWidgetItem(data[i][j]));
        }
    }
}

void MainWindow::clear_UI()
{
    ui->lineEdit_bas->clear();
    ui->lineEdit_equ->clear();
    ui->lineEdit_temp->clear();
}

void MainWindow::reshow()
{
    clear_UI();
    this->show();
}

三、实现效果

修改数据

技术图片

点击生成

技术图片

点击保存

技术图片

点击Yes

技术图片

完成效果

技术图片

如有不足之处,还望指正 [1]


  1. 如果对您有帮助可以点赞、收藏、关注,将会是我最大的动力 ??





以上是关于qt新建word失败的主要内容,如果未能解决你的问题,请参考以下文章

新建Microsoft Word文档

qt中怎么新建文本文件

【QT画图】怎么实现在画布上输入文字功能

将word内容追击到新建WORD文档

电脑上新建word文档不见了怎么办

电脑上新建没有word文档怎么办