Qt自带的类QAxObject导出Excel
QAxObject是Qt的一个原生类库,可以操作office文件,但是它依赖于ActiveX的可用性,并且在不同的平台和环境中可能会有一些差异。此外,该方法要求用户系统上安装有相应的ActiveX对象(如Microsoft Office)
实现代码:
#include <QCoreApplication>
#include <QAxObject>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QAxObject excel("Excel.Application");
excel.setProperty("Visible", true);
QAxObject *workbooks = excel.querySubObject("Workbooks");
QAxObject *workbook = workbooks->querySubObject("Add()");
QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
// 写入数据到单元格
QAxObject *cell = worksheet->querySubObject("Cells(int, int)", 1, 1);
cell->dynamicCall("SetValue(const QVariant&)", "Hello");
// 保存工作簿
workbook->dynamicCall("SaveAs(const QString&)", QDir::currentPath() + "/example.xlsx");
// 关闭Excel应用
excel.dynamicCall("Quit()");
return a.exec();
}
优点
1)个人认为QAxObject的优点确实没有什么,我想唯一的优点就是可以直接使用,不需要编译第三方的源码。
缺点
1)依赖于平台和ActiveX对象: QAxObject 的可移植性受限于ActiveX的可用性,并且在不同的平台和环境中可能会有一些差异。此外,该方法要求用户系统上安装有相应的ActiveX对象(如Microsoft Office)。
2)性能: 直接与ActiveX对象进行交互可能引入一些性能开销,特别是在处理大量数据或频繁调用操作时。本人亲测导出数据慢到无法忍受
从使用角度,若是单机使用,数据量少可以使用QAxObject,免去第三方调用的问题,若是需要发布使用,不推荐,建议使用第三方。