qt代码怎么创建数据库表格(C跨平台库QT学习操作Excel)

qt代码怎么创建数据库表格(C跨平台库QT学习操作Excel)(1)

一、打开Excel文件
  • 首先在.pro文件加入:QT = axcontainer
  • 引入头文件: #include <QAxObject>

qDebug() << "尝试打开Excel" << path << endl; // 操作Excel的对象 QAxObject *excel = NULL; // workbook对象 QAxObject *workbooks = NULL; // workbook对象 QAxObject *workbook = NULL; excel = new QAxObject("Excel.Application"); //true 表示操作文件时可见,false表示为不可见 excel->dynamicCall("SetVisible(bool)", true); workbooks = excel->querySubObject("WorkBooks"); // 指定路径打开Excel workbook = workbooks->querySubObject("Open(QString&)", path);

二、获取worksheet

// 获取所有worksheets QAxObject * worksheets = workbook->querySubObject("WorkSheets"); // count属性获取worksheet数量 int iWorkSheet = worksheets->property("Count").toInt(); qDebug() << QString("Excel文件中表的个数: %1").arg(QString::number(iWorkSheet)); // 取得第一个worksheet QAxObject * worksheet = worksheets->querySubObject("Item(int)", 1); // 根据名称获取worksheet QAxObject* pWorkSheet = NULL; try { pWorkSheet = worksheets->querySubObject("Item(QString)", name); } catch (...) { qCritical()<<"获取sheet失败..."; }

三、数据读取

// 获取有数据的区域 QAxObject * usedrange = worksheet->querySubObject("UsedRange"); // 通过rows获取行数 QAxObject * rows = usedrange->querySubObject("Rows"); int iRows = rows->property("Count").toInt(); qDebug() << QString("行数为: %1").arg(QString::number(iRows)); // 通过Columns获取列数 QAxObject * columns = usedrange->querySubObject("Columns"); int iColumns = columns->property("Count").toInt(); qDebug() << QString("列数为: %1").arg(QString::number(iColumns)); //————————数据的起始行——— int iStartRow = rows->property("Row").toInt(); qDebug() << QString("起始行为: %1").arg(QString::number(iStartRow)); //————————数据的起始列———————————— int iColumn = columns->property("Column").toInt(); qDebug() << QString("起始列为: %1").arg(QString::number(iColumn)); // 将所有的数据读取到QVariant容器中保存 QVariant var = usedrange->dynamicCall("Value"); // 将QVariant转换为Qlist的二维数组 QVariantList varRows=var.toList(); if(varRows.isEmpty()) { qDebug() << "没有数据" << endl; }else{ const int row_count = varRows.size(); QVariantList rowData; // 转换过程 for(int i=0;i<row_count; i) { rowData = varRows[i].toList(); excel_list.push_back(rowData); } } // 另一种方式获取单元格值 QAxObject *cellA; // 设置要操作的单元格,如A1 QString A = "A" QString::number(cellrow); // 获取单元格内容 cellA = worksheet->querySubObject("Range(QVariant, QVariant)",A); // 设置值 cellA->dynamicCall("SetValue(const QVariant&)",QVariant("新值"));

四、数据写入

// 不显示任何警告信息。如果为true在关闭是会出现类似“文件已修改,是否保存”的提示 excel->setProperty("DisplayAlerts", false); // 保存数据 workbook->dynamicCall("Save()"); // 另存 // workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));

五、添加worksheet

QAxObject *pWorkSheet = NULL; try { //获取工作表数目 int count = worksheets->property("Count").toInt(); // 取得最后一个表 QAxObject *pLastSheet = worksheets->querySubObject("Item(int)", count); // 新增一个表 pWorkSheet = worksheets->querySubObject("Add(QVariant)", pLastSheet->asVariant()); // 移动位置 pLastSheet->dynamicCall("Move(QVariant)", pWorkSheet->asVariant()); // 设置工作表名称 pWorkSheet->setProperty("Name", name); } catch (...) { qCritical() <<"创建sheet失败..." << endl; }

六、根据名称删除表

try { QAxObject *pFirstSheet = worksheets->querySubObject("Item(QString)", name); pFirstSheet->dynamicCall("delete"); } catch (...) { qCritical()<<"删除sheet失败..."; return false; } return true;

七、按索引删除表

try { QAxObject *pFirstSheet = worksheets->querySubObject("Item(int)", index); pFirstSheet->dynamicCall("delete"); } catch (...) { qCritical()<<"删除sheet失败..."; } // 操作成功

八、释放Excel对象

Excel对象如果没有释放,会造成进程里Excel相关进程无法自动退出。

// 关闭workbook workbook->dynamicCall("Close()"); // 关闭excel excel->dynamicCall("Quit()"); if (excel) { delete excel; excel = NULL; }

九、QT其它操作Excel的方法1. QtXlsx

网址:http://qtxlsx.debao.me可以不安装Excel就能方便地对Excel文件进行操作。

2. ODBC操作Excel文件

须安装MS Access数据库引擎。

其它库功能对比:

qt代码怎么创建数据库表格(C跨平台库QT学习操作Excel)(2)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页