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

这个代码示例展示了如何使用Qt的QAxObject类来操作Excel,包括创建新的Excel文件、打开已存在的文件、保存文件、读取和写入单元格数据以及获取工作表信息。通过动态调用和属性设置,实现了Excel的可视化控制和警告处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 #include "qtExcelApi.h"

2

3

4 qtExcelApi::qtExcelApi(void)5 {6

7 }8

9 qtExcelApi::~qtExcelApi()10 {11 }12

13

14 //打开Excel

15 voidqtExcelApi::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, booltype)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 voidqtExcelApi::CloseExcel()61 {62 if (ExcelApp !=NULL)63 {64 ExcelApp->dynamicCall("Quit()");65 deleteExcelApp;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 intcolumn)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 deleterange;90 }91 return string(cdata);;92 }93

94

95 //读取整个sheet

96 vectorqtExcelApi::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 vectorvecUsedRange;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 deleteusedRange;114 returnvecUsedRange;115 }116

117

118 //读取sheet中的一个范围

119 vector 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 vectorvecUsedRange;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 deletecell;139 returnvecUsedRange;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 intqtExcelApi::GetSheetCount()153 {154 int intCount = ExcelSheets->property("Count").toInt();155 returnintCount;156 }157

158

159 //获得当前sheet使用的行数

160 intqtExcelApi::GetRowNum()161 {162 QAxObject *usedRange = ExcelSheet->querySubObject("UsedRange");163 QAxObject *rows = usedRange->querySubObject("Rows");164 int nRows = rows->property("Count").toInt();165 returnnRows;166 }167

168

169 //获得当前sheet使用的列数

170 intqtExcelApi::GetColumnNum()171 {172 QAxObject *usedRange = ExcelSheet->querySubObject("UsedRange");173 QAxObject *columns = usedRange->querySubObject("Columns");174 int nCols = columns->property("Count").toInt();175 returnnCols;176 }177

178

179 //设置当前工作表

180 bool qtExcelApi::SetCurrentSheetByNum(const int&id)181 {182 ExcelSheet = ExcelBook->querySubObject("Worksheets(int)", 2);183 return true;184 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值