我的测试版本Qt 5.6.2    QtCreator4.0.3    VS2013

qtExcelApi.h


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


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 };

View Code

 

 

qtExcelApi.cpp


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


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 }

View Code

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