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 }