以下代码是在Qt Creator里创建的工程
Qt操作excel依赖QAxObject
注意事项:
配置xxx.pro
引入Active Qt库
QT += axcontainer
引入objbase.h,解决返回QAxObject为空的问题
#include
//在需要创建QAxObject()上方调用如下代码
CoInitializeEx(NULL, COINIT_MULTITHREADED);
m_pExcel = new(std::nothrow) QAxObject();
因为QAxObject默认是在单线程下使用的,因此如果不用上门代码申明多线程, 会导致获取的excel的QAxObject都是NULL
保存或者打开excel的路径需要统一用"\"
用QDir::toNativeSeparators(m_strPath)进行转换
m_pWorkbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(m_strPath));
SaveAs必须在所有操作结束后调用,否则不会保存到excel中
可以放到close前调用即可
m_pWorkbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(m_strPath));
m_pWorkbook->dynamicCall("Close()");
m_pExcel->dynamicCall("Quit()");
delete m_pExcel;
m_pExcel = NULL;
Demo
#ifndef EXCELOPERATOR_H
#define EXCELOPERATOR_H
#include
#include
#include
#include
class ExcelOperator : public QObject
{
Q_OBJECT
public:
explicit ExcelOperator(QObject *parent = nullptr);
~ExcelOperator();
//打开文件
bool open(QString path);
//关闭文件
bool close();
//获取工作表数量
int getSheetsCount();
//根据名称创建工作表
QAxObject* addSheet(QString name);
//根据名称删除工作表
bool delSheet(QString name);
//根据编号删除工作表
bool delSheet(int index);
//根据名称获取工作表
QAxObject* getSheet(QString name);
//根据编号获取工作表
QAxObject* getSheet(int index);
//获取行对象
QAxObject* getRows(QAxObject* pSheet);
//获取行数
int getRowsCount(QAxObject* pSheet);
//获取列对象
QAxObject* getColumns(QAx