QT界面开发-QAxObject 读写excel(COM组件)-常用功能封装代码

本文章向大家介绍QT界面开发-QAxObject 读写excel(COM组件)-常用功能封装代码,主要包括QT界面开发-QAxObject 读写excel(COM组件)-常用功能封装代码使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

qtExcelApi.h

  1 #pragma once
  2 
  3 #include <ActiveQt/QAxObject>
  4 #include <QDir>
  5 
  6 using namespace std;
  7 
  8 class qtExcelApi
  9 {
 10 public:
 11     qtExcelApi(void);
 12     ~qtExcelApi(void);
 13 
 14 
 15     /**
 16     * @brief 新建Excel
 17     */
 18     void CreateExcel();
 19 
 20 
 21     /**
 22     * @brief 打开Excel
 23     * @param[in] filePath  路径
 24     * @param[in] type  打开时是否显示EXCEL
 25     * @return BOOL 打开成功&失败
 26     */
 27     bool OpenFile(const char* filePath, bool type);
 28 
 29 
 30     /**
 31     * @brief 关闭Excel
 32     */
 33     void CloseExcel();
 34 
 35 
 36     /**
 37     * @brief 保存Excel
 38     */
 39     void Save(const char* savePath);
 40 
 41 
 42     /**
 43     * @brief 获取所有的工作表数量
 44     * @return int 数量
 45     */
 46     int GetSheetCount();
 47 
 48 
 49     /**
 50     * @brief 获取单元格数据
 51     * @param[in] row  行
 52     * @param[in] column  列
 53     * @return string 内容
 54     */
 55     string GetRangeData(const int row, const int column);
 56 
 57 
 58     /**
 59     * @brief 读取整个sheet
 60     * @return string 内容
 61     */
 62     vector<string> GetUsedRange();
 63 
 64 
 65     /**
 66     * @brief 读取sheet中的一个范围
 67     * @return string 内容
 68     */
 69     vector<string> GetScopeRange(const char* A1, const char* A5);
 70     
 71 
 72     /**
 73     * @brief 当前sheet单元格写入内容
 74     * @param[in] row  行
 75     * @param[in] column  列
 76     * @param[in] Data  内容
 77     */
 78     void SetRangeData(const int row, const int column, const char* Data);
 79 
 80 
 81     /**
 82     * @brief 获得当前sheet使用的行数
 83     * @return int 数量
 84     */
 85     int GetRowNum();
 86 
 87 
 88     /**
 89     * @brief 获得当前sheet使用的列数
 90     * @return int 数量
 91     */
 92     int GetColumnNum();
 93 
 94 
 95     /**
 96     * @brief 设置当前工作表
 97     * @param[in] id  第几个sheet,从1开始
 98     * @return BOOL 设置成功&失败
 99     */
100     bool SetCurrentSheetByNum(const int& id);
101 
102 
103 
104 private:
105 
106     //Excel应用程序
107     QAxObject *ExcelApp;
108     //Excel工作簿
109     QAxObject *ExcelBooks;
110     QAxObject *ExcelBook;
111     //Excel工作表
112     QAxObject *ExcelSheets;
113     QAxObject *ExcelSheet;
114     //Excel单元格
115     QAxObject *ExcelRange;
116 
117 };

qtExcelApi.cpp

  1 #include "qtExcelApi.h"
  2 
  3 
  4 qtExcelApi::qtExcelApi(void)
  5 {
  6 
  7 }
  8 
  9 qtExcelApi::~qtExcelApi()
 10 {
 11 }
 12 
 13 
 14 //打开Excel
 15 void qtExcelApi::CreateExcel()
 16 {
 17     //连接excel
 18     ExcelApp = new QAxObject("Excel.Application");
 19     //是否可视化excel
 20     ExcelApp->dynamicCall("SetVisible(bool Visible)", true);
 21     //是否弹出警告窗口
 22     ExcelApp->setProperty("DisplayAlerts", false);
 23     //获取工作簿集合
 24     ExcelBooks = ExcelApp->querySubObject("WorkBooks");
 25     //新建一个工作簿
 26     ExcelBooks->dynamicCall("Add");
 27     //获取当前工作簿
 28     ExcelBook = ExcelApp->querySubObject("ActiveWorkBook");
 29     //获取工作表格集合
 30     ExcelSheets = ExcelBook->querySubObject("Sheets");
 31     //获取当前工作表格1,即sheet1
 32     ExcelSheet = ExcelSheets->querySubObject("Item(int)", 1);
 33 }
 34 
 35 
 36 //打开Excel
 37 bool qtExcelApi::OpenFile(const char* filePath, bool type)
 38 {
 39     //连接excel
 40     ExcelApp = new QAxObject("Excel.Application");
 41     //是否可视化excel
 42     ExcelApp->dynamicCall("SetVisible(bool Visible)", type);
 43     //是否弹出警告窗口
 44     ExcelApp->setProperty("DisplayAlerts", false);
 45     //获取工作簿集合
 46     ExcelBooks = ExcelApp->querySubObject("WorkBooks");
 47     //打开一个工作簿
 48     ExcelBooks->dynamicCall("Open(const QString&)", QDir::toNativeSeparators(filePath));
 49     //获取当前工作簿
 50     ExcelBook = ExcelApp->querySubObject("ActiveWorkBook");
 51     //获取工作表格集合
 52     ExcelSheets = ExcelBook->querySubObject("Sheets");
 53     //获取当前工作表格1,即sheet1
 54     ExcelSheet = ExcelSheets->querySubObject("Item(int)", 1);
 55     return true;
 56 }
 57 
 58 
 59 //关闭Excel
 60 void qtExcelApi::CloseExcel()
 61 {
 62     if (ExcelApp != NULL)
 63     {
 64         ExcelApp->dynamicCall("Quit()");
 65         delete ExcelApp;
 66         ExcelApp = NULL;
 67     }
 68 }
 69 
 70 
 71 //保存Excel
 72 void qtExcelApi::Save(const char* savePath)
 73 {
 74     ExcelBook->dynamicCall("SaveAs(const QString &)", QDir::toNativeSeparators(savePath));
 75 }
 76 
 77 
 78 //获取单元格数据
 79 string qtExcelApi::GetRangeData(const int row, const int column)
 80 {
 81     QVariant ret;
 82     QByteArray cdata;
 83     if (this->ExcelSheet != NULL && !this->ExcelSheet->isNull())
 84     {
 85         QAxObject* range = this->ExcelSheet->querySubObject("Cells(int, int)", row, column);
 86         ret = range->dynamicCall("Value()");
 87         QString qs = ret.toString();
 88         cdata = qs.toLocal8Bit();
 89         delete range;
 90     }    
 91     return string(cdata);;
 92 }
 93 
 94 
 95 //读取整个sheet
 96 vector<string> qtExcelApi::GetUsedRange()
 97 {    
 98     //读取当前工作表所有数据
 99     QAxObject *usedRange = ExcelSheet->querySubObject("UsedRange");
100     QVariant var = usedRange->dynamicCall("Value()");
101     QVariantList varRows = var.toList();
102     const int rowCount = varRows.size();
103     QVariantList rowData;
104     QByteArray cdata;
105     vector<string> vecUsedRange;
106     for (int i = 0; i < rowCount; ++i)
107     {
108         rowData = varRows[i].toList();
109         QString qs = rowData[0].toString();
110         cdata = qs.toLocal8Bit();
111         vecUsedRange.push_back(string(cdata));
112     }
113     delete usedRange;
114     return vecUsedRange;
115 }
116 
117 
118 //读取sheet中的一个范围
119 vector<string> qtExcelApi::GetScopeRange(const char* A1, const char* A5)
120 {
121     QVariantList params;
122     params << A1 << A5;  //A1至A5的数据    
123     //读取当前工作表所有数据
124     QAxObject *cell = ExcelSheet->querySubObject("Range(QVariant,QVariant)", params);
125     QVariant var = cell->dynamicCall("Value2()");
126     QVariantList varRows = var.toList();
127     const int rowCount = varRows.size();
128     QVariantList rowData;
129     QByteArray cdata;
130     vector<string> vecUsedRange;
131     for (int i = 0; i < rowCount; ++i)
132     {
133         rowData = varRows[i].toList();
134         QString qs = rowData[0].toString();
135         cdata = qs.toLocal8Bit();
136         vecUsedRange.push_back(string(cdata));
137     }
138     delete cell;
139     return vecUsedRange;
140 }
141 
142 
143 //当前sheet单元格写入内容
144 void qtExcelApi::SetRangeData(const int row, const int column, const char* Data)
145 {
146     QAxObject *cell = ExcelSheet->querySubObject("Cells(int,int)", row, column);
147     cell->setProperty("Value", Data);
148 }
149 
150 
151 //获取所有的工作表数量
152 int qtExcelApi::GetSheetCount()
153 {
154     int intCount = ExcelSheets->property("Count").toInt();
155     return intCount;
156 }
157 
158 
159 //获得当前sheet使用的行数
160 int qtExcelApi::GetRowNum()
161 {
162     QAxObject *usedRange = ExcelSheet->querySubObject("UsedRange");
163     QAxObject *rows = usedRange->querySubObject("Rows");
164     int nRows = rows->property("Count").toInt();
165     return nRows;
166 }
167 
168 
169 //获得当前sheet使用的列数
170 int qtExcelApi::GetColumnNum()
171 {
172     QAxObject *usedRange = ExcelSheet->querySubObject("UsedRange");
173     QAxObject *columns = usedRange->querySubObject("Columns");
174     int nCols = columns->property("Count").toInt();
175     return nCols;
176 }
177 
178 
179 //设置当前工作表
180 bool qtExcelApi::SetCurrentSheetByNum(const int& id)
181 {
182     ExcelSheet = ExcelBook->querySubObject("Worksheets(int)", 2);
183     return true;
184 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值