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.保存并关闭工作薄