資源簡介
原博客地址:http://blog.csdn.net/frank3543/article/details/45042977
測試可使用,方便大家,有什么問題的請指出。我是qt5,配置照著項目應該沒問題。

代碼片段和文件信息
#include?“excelengine.h“
ExcelEngine::ExcelEngine()
{
????pExcel?????=?NULL;
????pWorkbooks?=?NULL;
????pWorkbook??=?NULL;
????pWorksheet?=?NULL;
????sXlsFile?????=?““;
????nRowCount????=?0;
????nColumnCount?=?0;
????nStartRow????=?0;
????nStartColumn?=?0;
????bIsOpen?????=?false;
????bIsValid????=?false;
????bIsANewFile?=?false;
????bIsSaveAlready?=?false;
????HRESULT?r?=?OleInitialize(0);
????if?(r?!=?S_OK?&&?r?!=?S_FALSE)
????{
????????qDebug(“Qt:?Could?not?initialize?OLE?(error?%x)“?(unsigned?int)r);
????}
}
ExcelEngine::ExcelEngine(QString?xlsFile)
{
????pExcel?????=?NULL;
????pWorkbooks?=?NULL;
????pWorkbook??=?NULL;
????pWorksheet?=?NULL;
????sXlsFile?????=?xlsFile;
????nRowCount????=?0;
????nColumnCount?=?0;
????nStartRow????=?0;
????nStartColumn?=?0;
????bIsOpen?????=?false;
????bIsValid????=?false;
????bIsANewFile?=?false;
????bIsSaveAlready?=?false;
????HRESULT?r?=?OleInitialize(0);
????if?(r?!=?S_OK?&&?r?!=?S_FALSE)
????{
????????qDebug(“Qt:?Could?not?initialize?OLE?(error?%x)“?(unsigned?int)r);
????}
}
ExcelEngine::~ExcelEngine()
{
????if?(?bIsOpen?)
????{
????????//析構前,先保存數據,然后關閉workbook
????????Close();
????}
????OleUninitialize();
}
/**
??*@brief?打開sXlsFile指定的excel報表
??*@return?true?:?打開成功
??*????????false:?打開失敗
??*/
bool?ExcelEngine::Open(UINT?nSheet?bool?visible)
{
????if?(?bIsOpen?)
????{
????????//return?bIsOpen;
????????Close();
????}
????nCurrSheet?=?nSheet;
????bIsVisible?=?visible;
????if?(?NULL?==?pExcel?)
????{
????????pExcel?=?new?QAxobject(“Excel.Application“);
????????if?(?pExcel?)
????????{
????????????bIsValid?=?true;
????????}
????????else
????????{
????????????bIsValid?=?false;
????????????bIsOpen??=?false;
????????????return?bIsOpen;
????????}
????????pExcel->dynamicCall(“SetVisible(bool)“?bIsVisible);
????}
????if?(?!bIsValid?)
????{
????????bIsOpen??=?false;
????????return?bIsOpen;
????}
????if?(?sXlsFile.isEmpty()?)
????{
????????bIsOpen??=?false;
????????return?bIsOpen;
????}
????/*如果指向的文件不存在,則需要新建一個*/
????QFile?f(sXlsFile);
????if?(!f.exists())
????{
????????bIsANewFile?=?true;
????}
????else
????{
????????bIsANewFile?=?false;
????}
????if?(!bIsANewFile)
????{
????????pWorkbooks?=?pExcel->querySubobject(“WorkBooks“);?//獲取工作簿
????????pWorkbook?=?pWorkbooks->querySubobject(“Open(QString?QVariant)“sXlsFileQVariant(0));?//打開xls對應的工作簿
????}
????else
????{
????????pWorkbooks?=?pExcel->querySubobject(“WorkBooks“);?????//獲取工作簿
????????pWorkbooks->dynamicCall(“Add“);???????????????????????//添加一個新的工作薄
????????pWorkbook??=?pExcel->querySubobject(“ActiveWorkBook“);?//新建一個xls
????}
????pWorksheet?=?pWorkbook->querySubobject(“WorkSheets(int)“?nCurrSheet);//打開sheet
????//至此已打開,開始獲取相應屬性
????QAxobject?*usedrange?=?pWorksheet->querySubobject(“UsedRange“);//獲取該sheet的使用范圍對象
????QAxobject?*rows?=?usedrange->querySubobject(“Rows“);
????QAxobject?*columns?=?usedrange-
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????10094??2018-01-29?10:51??excelTest\excelengine.cpp
?????文件???????1260??2018-01-29?10:32??excelTest\excelengine.h
?????文件???????1234??2018-01-29?10:16??excelTest\excelTest.pro
?????文件??????23855??2018-01-29?09:35??excelTest\excelTest.pro.user
?????文件????????175??2018-01-26?14:50??excelTest\main.cpp
?????文件????????614??2018-01-29?10:54??excelTest\widget.cpp
?????文件????????414??2018-01-29?10:53??excelTest\widget.h
?????文件???????1256??2018-01-29?10:34??excelTest\widget.ui
?????目錄??????????0??2018-01-29?10:58??excelTest
-----------?---------??----------?-----??----
????????????????38902????????????????????9
評論
共有 條評論