封装Excel操作类

1.设置打开Excel应用程序时默认创建工作表的数量:

QAxobject *pExcelObj=nullptr;
pExcelObj->dynamicCall("SetSheetsInNewWorkbook(int)", 3);

2.常用API介绍
//链接Excel控件
    QAxObject* m_pExcelObj = new QAxObject(this);  
	m_pExcelObj->setControl("Excel.Application");
	m_pExcelObj->dynamicCall("SetVisible (bool Visible)", false);      //不显示窗体
	m_pExcelObj->setProperty("DisplayAlerts", false);      //不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示

//获取工作薄
	 QAxObject*	m_pWorkbooks = m_pExcelObj->querySubObject("Workbooks");
//打开已有Excel文件
        m_pWorkbooks->dynamicCall("Open(const QString &strFilePath)", m_strFilePath);
//新建一个excel 文件
        m_pWorkbooks->dynamicCall("Add"); 
//获取当前活动工作薄
	 QAxObject*	m_pActiveBook = m_pExcelObj->querySubObject("ActiveWorkBook");
//获取工作表
	 QAxObject*	m_pWorkSheets = m_pActiveBook->querySubObject("Sheets");
//获取指定工作表
		QAxObject *pCurSheet = m_pWorkSheets->querySubObject("Item(int)", iSheetIndex); 
//读取工作表的表名
	    const QString sheetName = pCurSheet->property("Name").toString();
//获取工作表的总数
        const unsigned int iSheetCnt = m_pWorkSheets->property("Count").toInt();   
//设置工作表的内容
		 pTmpUsedRange->setProperty("Value", QString("sdsdsdsd"));
//设置单元格的数字格式
          bool bRet = pCell->setProperty("NumberFormatLocal", strTextFormat);
//获取活动工作表的使用范围
		  QAxObject *pTmpUsedRange = pActiveSheet->querySubObject("UsedRange");
//设置单元格内容的字体大小
		  bool bRet = pTmpUsedRange->querySubObject("Font")->setProperty("Size", iFontSize);
//保存工作表
		   m_pActiveBook->dynamicCall("SaveCopyAs(QString)", QDir::toNativeSeparators(filePath));
3.打开Excel文件的函数
bool COperatorExcel::open(EOperateMode mode)
{
	bool bIsOpen = false;
	m_pExcelObj = new QAxObject(this);   //连接excell 控件
	m_pExcelObj->setControl("Excel.Application");
	m_pExcelObj->dynamicCall("SetVisible (bool Visible)", false);      //不显示窗体
	m_pExcelObj->setProperty("DisplayAlerts", false);                 //不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示

	do
	{
		//获取工作薄
		m_pWorkbooks = m_pExcelObj->querySubObject("Workbooks");
		if (nullptr == m_pWorkbooks)
		{
			SAFEDELETE(m_pExcelObj)
				bIsOpen = false;
			break;
		}

		//打开工作薄
		if (EOperateMode::EReadOnly == mode)
		{
			m_pWorkbooks->dynamicCall("Open(const QString &strFilePath)", m_strFilePath);
		}
		else if (EOperateMode::ECreateNewFile == mode)
		{
			SetDefaultWorkSheetNums(m_iDefaultWorkSheetNum);
			m_pWorkbooks->dynamicCall("Add");
		}

		//获取当前活动工作薄
		m_pActiveBook = m_pExcelObj->querySubObject("ActiveWorkBook");
		if (nullptr == m_pActiveBook)
		{
			bIsOpen = false;
			SAFEDELETE(m_pExcelObj)
				break;
		}

		//获取工作表
		m_pWorkSheets = m_pActiveBook->querySubObject("Sheets");
		if (nullptr == m_pWorkSheets)
		{
			bIsOpen = false;
			SAFEDELETE(m_pWorkSheets)
				break;
		}

		bIsOpen = true;
	} while (false);

	return bIsOpen;
}
4.新建一个工作表
QAxObject *COperatorExcel::appendSheet(QAxObject *pSheetObj)
{
	if (nullptr == pSheetObj) { return  nullptr; }
	const int  sheetsCnt = pSheetObj->property("Count").toInt();
	QAxObject  *pLastSheet = pSheetObj->querySubObject("Item(int)", sheetsCnt);
	if (nullptr == pLastSheet) { return nullptr; }
	pSheetObj->dynamicCall("Add(QVariant)", pLastSheet->asVariant());   //在最后一个的前面插入新sheet
	QAxObject *pNewSheet = pSheetObj->querySubObject("Item(int)", sheetsCnt);
	pLastSheet->dynamicCall("Move(QVariant)", pNewSheet->asVariant());   //将新表移到最后
	return pNewSheet;
}
5.将数字类型的列号转为Excel工作表中大写字符串的列号
  例如:在Excel中第一行第一列为A1,convertIntToExcelColStr() 函数的作用就是将表示列号的**1**转为**A**
QString COperatorExcel::convertIntToExcelColStr(unsigned int iColIndex)
{
	QString retStr = "";
	if (0 == iColIndex) {
		iColIndex = 1;
	}
	if (0 != (iColIndex / 26))
	{
		retStr = QString(char('A') + char(iColIndex / 26 - 1));
	}

	retStr += QString(char('A') + char(iColIndex % 26 - 1));
	return retStr.trimmed();
}

更多相关的API参照:QAxbase提供的接口方法

Excel类的完整封装:COperatorExcel类的完整封装
用Qt库实现对Excel 的封装类COperatorExcel,支持以下功能:
1.打开/新建Excel文件
2.读/写Excel文件
3.设置新建Excel文件时默认创建的工作表数目
4.当前工作薄下新增工作表
5.设置单元格的数字格式
6.设置单元格的样式(字体大小、行高、列宽)
7.保存并关闭工作薄

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值