#pragma once #include "Defines.h" #include "iPlugin_global.h" // 基础Excel引擎(基类/虚类) class I_PLUGIN_EXPORT ExcelEngine : public QObject { Q_OBJECT public: ExcelEngine(); ~ExcelEngine(); #ifdef Q_OS_WIN // 只是为了少一次检测而已 virtual void setProgID(QString s) { } #endif public: /// @brief 获取excel的数据信息 /// @note bAutoLoad是否自动加载首页信息 virtual bool loadExcel(const QString& sFilePath, bool bAutoLoad = true); /// @brief 新建一个工作簿,方便后续另存 virtual bool addWorkBook(QString sDefaultSheet = ""); /// @brief 获取excel的Sheet页 virtual bool getSheetNames(QStringList &listNames); /// @brief 设定操作的Sheet /// @param nSheetIndex Sheet索引,从1开始 /// @param sSheetName Sheet名称 /// @note 以nSheetIndex为主,如果考虑sSheetName,此时需要把nSheetIndex=-1 /// setDefaultSheet(-1, “sheet1”) virtual bool setDefaultSheet(int nSheetIndex = 1, QString sSheetName = ""); /// @brief 获取excel的数据(组成的矩形网格),注:Excel的索引均是从1开始 /// @param vvecData 获取到的数据 /// @param nRowFrom Excel开始行,从1开始 /// @param nColFrom Excel开始列,从1开始 /// @param nRowTo Excel结束行,从1开始,默认为-1,nRowTo=最大行数 /// @param nColTo Excel结束列,从1开始,默认为-1,nColTo=最大列数 virtual bool getCellValues(VVecVariant& vvecData, \ int nRowFrom = 1, int nColFrom = 1, \ int nRowTo = -1, int nColTo = -1); /// @brief 设置excel的数据(组成的矩形网格),注:Excel的索引均是从1开始 /// @param vvecData 需要填充设置的数据 /// @param nRowFrom Excel开始行,从1开始 /// @param nColFrom Excel开始列,从1开始 /// @param bFormat 设置数据之后,是否重置表格样式 virtual bool setCellValues(const VVecVariant& vvecData, \ int nRowFrom = 1, int nColFrom = 1, \ bool bFormat = false); /// @brief 执行最后的excel保存动作 virtual bool saveExcel(bool bAdjustLayout = true); virtual bool saveAsExcel(QString sFile, bool bAdjustLayout = true); protected: /// @brief 规范化网格范围,各数据索引从1/0开始,内部敲定 virtual bool normalizeRange(int& nRowFrom, int& nColFrom, \ int& nRowTo, int& nColTo, \ int nDefaultFirst = 1); // 数据格式转换,注:为方便,llist内的QVariant依然为QList bool llistToVVec(const QList& llist, VVecVariant& vvec); bool vvecToLlist(QList& llist, const VVecVariant& vvec); /// @brief 像素和磅的转换 double getPoundFromPix(double d); double getPixFromPound(double d); public: void setTextClr(QColor clr); void setBackgndClr(QColor clr); void setBorderClr(QColor clr); void setAlignFlag(int flag); void setWrapText(bool b); protected: // 对应的文件 QString m_sFileName; // 表格行列 int m_nRowStart; int m_nColStart; int m_nRowCount; int m_nColCount; // Sheet int m_nLastSheetIndex; QStringList m_listSheets; // 写入时的格式Format QColor m_oTextClr; //文本颜色 QColor m_oBackgndClr; //背景颜色 QColor m_oBorderClr; //边框颜色 int m_nAlignFlag; //对齐方式 bool m_bWrapText; //自动换行 double m_dRatioPP; //像素/磅 的比值,通常1.3333 //目前只是用于导出表格图片时设定高度/宽度时使用 };