You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/iBase/iPlugin/ExcelEngine.h

116 lines
3.7 KiB
C

#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开始默认为-1nRowTo=最大行数
/// @param nColTo Excel结束列从1开始默认为-1nColTo=最大列数
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<QVariant>& llist, VVecVariant& vvec);
bool vvecToLlist(QList<QVariant>& 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
//目前只是用于导出表格图片时设定高度/宽度时使用
};