Qt中嵌入Excel


采用Qt中QAxObject和QAxWidget实现Excel表格嵌入进Qt程序中,实现Excel的读写操作
资源截图
代码片段和文件信息
#include “ExcelOper.h“
#include ject>
#include 
#include 

ExcelOper::ExcelOper(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
m_axWidget = nullptr;

connect(ui.createBtn SIGNAL(clicked()) this SLOT(onCreateBtn()));
connect(ui.writeBtn SIGNAL(clicked()) this SLOT(onWriteBtn()));
connect(ui.readBtn SIGNAL(clicked()) this SLOT(onReadBtn()));
connect(ui.clearBtn SIGNAL(clicked()) this SLOT(onClear()));
}

ExcelOper::~ExcelOper()
{
this->close();
}

void ExcelOper::onCreateBtn()
{
this->close();
if (m_axWidget == nullptr)
{
m_axWidget = new QAxWidget(this);
}
//m_axWidget->setControl(“{00020906-0000-0000-C000-000000000046}“);//word
m_axWidget->setControl(“{00020832-0000-0000-C000-000000000046}“);//Excel



m_axWidget->setProperty(“DisplayAlerts“ true);
m_axWidget->setProperty(“Visible“ true);

ui.vLayout->addWidget(m_axWidget);

//需要改变窗口大小,否则Excel不能加载出来
QSize oldSize = this->size();
this->resize(oldSize.width() + 1 oldSize.height() + 1);
QApplication::processEvents();
this->resize(oldSize);
}

void ExcelOper::onWriteBtn()
{
QAxobject * worksheets = m_axWidget->querySubobject(“WorkSheets“);
// 获取第n个工作表
QAxobject * sheet = worksheets->querySubobject(“Item(int)“ 1);
const int row = 200000;
const int column = 5;
QVector> cells(row);
for (int i = 0; i < row; i++)
{
cells[i].resize(column);
for (int j = 0; j < column; j++)
{
//cells[i][j] = QString(“%1_%2“).arg(i).arg(j);
cells[i][j] = i + j;
}
}
this->writeSheet(sheet cells);

m_axWidget->setFocus();//若不设置焦点,Excel不能更新
}

void ExcelOper::onReadBtn()
{
QAxobject * worksheets = m_axWidget->querySubobject(“WorkSheets“);
//int num = worksheets->property(“Count“).toInt();
QAxobject * sheet = worksheets->querySubobject(“Item(int)“ 1);// 获取第n个工作表

qDebug() << “-----Read--start-----“;
QVariant all = this->readSheet(sheet);
qDebug() << “-----Read--convert-----“;
QVector> res;
fromVariant(all res);
qDebug() << “-----Read--finsh-----“;

m_axWidget->setFocus();
}

void ExcelOper::onClear()
{
QAxobject * worksheets = m_axWidget->querySubobject(“WorkSheets“);
QAxobject * sheet = worksheets->querySubobject(“Item(int)“ 1);
QAxobject *usedRange = sheet->querySubobject(“UsedRange“);
if (NULL != usedRange && !usedRange->isNull())
{
usedRange->dynamicCall(“Clear()“);
}

m_axWidget->setFocus();
}

QVariant ExcelOper::readSheet(QAxobject* sheet)
{
QVariant var;
if (sheet != NULL && !sheet->isNull())
{
QAxobject *usedRange = sheet->querySubobject(“UsedRange“);
if (NULL == usedRange || usedRange->isNull())
{
return var;
}
var = usedRange->dynamicCall(“Value“);
delete usedRange;
}
return var;
}

// 把QVariant转为QVector>
void ExcelOper::fromVariant(const QVariant &var QVector> &res)
{
QVariantList varRows = var

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-09-17 14:05  Qt中嵌入Excel
     目录           0  2019-09-17 14:06  Qt中嵌入ExcelExcelOper
     目录           0  2019-09-17 14:05  Qt中嵌入ExcelExcelOperDebug
     文件         200  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.log
     文件      329496  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.obj
     目录           0  2019-09-17 14:05  Qt中嵌入ExcelExcelOperDebugExcelOper.tlog
     文件        5534  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlogCL.command.1.tlog
     文件      100954  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlogCL.read.1.tlog
     文件        2196  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlogCL.write.1.tlog
     文件         184  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlogExcelOper.lastbuildstate
     文件       57198  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlogExcelOper.write.1u.tlog
     文件        1746  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tloglink.command.1.tlog
     文件        4024  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tloglink.read.1.tlog
     文件         666  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tloglink.write.1.tlog
     文件          86  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlogmoc.read.1u.tlog
     文件         226  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlogmoc.write.1u.tlog
     文件          90  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlog
cc.read.1u.tlog
     文件         218  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tlog
cc.write.1u.tlog
     文件          88  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tloguic.read.1u.tlog
     文件         210  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugExcelOper.tloguic.write.1u.tlog
     文件       99793  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugmain.obj
     文件      103462  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugmoc_ExcelOper.obj
     文件        5509  2019-09-09 14:24  Qt中嵌入ExcelExcelOperDebugqrc_ExcelOper.obj
     文件        1458  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugqt_work.log
     文件     1748992  2019-09-12 13:10  Qt中嵌入ExcelExcelOperDebugvc140.pdb
     文件        4973  2019-09-12 11:26  Qt中嵌入ExcelExcelOperExcelOper.cpp
     文件         747  2019-09-12 11:19  Qt中嵌入ExcelExcelOperExcelOper.h
     文件          69  2019-09-09 14:05  Qt中嵌入ExcelExcelOperExcelOper.qrc
     文件        1716  2019-09-12 11:20  Qt中嵌入ExcelExcelOperExcelOper.ui
     文件        8460  2019-09-09 14:24  Qt中嵌入ExcelExcelOperExcelOper.vcxproj
     目录           0  2019-09-17 14:05  Qt中嵌入ExcelExcelOperGeneratedFiles
............此处省略12个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)