Qt读取excel的代码,已经封装好了
来源:互联网 发布:豚鼠系列 知乎 编辑:程序博客网 时间:2024/05/23 15:18
核心代码:
QAxObject* excel = new QAxObject("Excel.Application"); excel->setProperty("Visible", false); QAxObject* workbooks = excel->querySubObject("WorkBooks"); workbooks->dynamicCall("Open (const QString&)", QString("c:\\副本1.xls")); //filename QAxObject* workbook = excel->querySubObject("ActiveWorkBook"); QAxObject* worksheets = workbook->querySubObject("WorkSheets"); QAxObject* worksheet = workbook->querySubObject("Worksheets(int)", 1); //worksheet number QAxObject* usedrange = worksheet->querySubObject("UsedRange"); QAxObject* rows = usedrange->querySubObject("Rows"); QAxObject* columns = usedrange->querySubObject("Columns"); int intRowStart = usedrange->property("Row").toInt(); int intColStart = usedrange->property("Column").toInt(); int intCols = columns->property("Count").toInt(); int intRows = rows->property("Count").toInt(); QAxObject * cell; for (int i = intRowStart; i < intRowStart + intRows; i++) { for (int j = intColStart; j < intColStart + intCols; j++) { cell = excel->querySubObject("Cells(Int, Int)", i, j ); QVariant cellValue = cell->dynamicCall("value"); cout << "Content " << cellValue.toString().toStdString() << endl; //value of the cell } } excel->setProperty("DisplayAlerts", 0); workbook->dynamicCall("Save(void)"); workbook->dynamicCall("Close (Boolean)", false); excel->setProperty("DisplayAlerts",1); delete excel;
========================================
========================================
封装好的类如下:
--
readexcel.h
#ifndef READEXCEL_H#define READEXCEL_H#include <map>#include <string>#include <vector>#include <iostream>#include <QAxObject>#include <QString>#include <QFile>class Position{public: Position() { m_row = 0; m_col = 0; } Position(int row, int col) { m_row = row; m_col = col; }public: int m_row; int m_col;public: bool operator<(const Position & ct) const // 两个const是必需的。 { if (m_row < ct.m_row) { return true; } else if (m_row == ct.m_row) { if ( m_col < ct.m_col ) { return true; } } return false; }};class ReadExcel{public: ReadExcel(); ~ReadExcel();public: //打开excel文件 bool openExcel(const QString& filename); //获取 指定单元格的数据 std::string getCellData(const int& row, const int& col); //获取 行数,列数 void getInfo(int& row, int& col) const;private: void getALLfromExcel();private: int m_row; //行 int m_col; //列 QString m_filename; QAxObject* m_excel; std::map<Position, std::string> m_mapdata; Position p;};#endif // READEXCEL_H
--
readexcel.cpp
#include "readexcel.h"#include <QDebug>#include <iostream>ReadExcel::ReadExcel() :m_row(0), m_col(0), m_filename(""){ m_excel = new QAxObject("Excel.Application");}ReadExcel::~ReadExcel(){ if (!m_mapdata.empty()) { m_mapdata.clear(); } delete m_excel;}//bool ReadExcel::openExcel(const QString &filename){ if (filename.isEmpty()) { m_row = 0; m_col = 0; return false; } QFile file(filename); if (!file.exists()){ m_row = 0; m_col = 0; return false; }; if (!m_mapdata.empty()) { m_mapdata.clear(); } m_filename = filename; try { getALLfromExcel(); } catch (...) { return false; } return true;}void ReadExcel::getInfo(int &row, int &col) const{ row = m_row; col = m_col;}std::string ReadExcel::getCellData(const int &row, const int &col){ if (row >= 1 && row <= m_row && col >= 1 && col <= m_col) { p.m_row = row; p.m_col = col; return m_mapdata[p]; } else { return NULL; }}void ReadExcel::getALLfromExcel(){ m_excel->setProperty("Visible", 0); QAxObject* workbooks = m_excel->querySubObject("WorkBooks"); workbooks->dynamicCall("Open (const QString&)", m_filename); QAxObject* workbook = m_excel->querySubObject("ActiveWorkBook"); QAxObject* worksheets = workbook->querySubObject("WorkSheets"); QAxObject* worksheet = workbook->querySubObject("Worksheets(int)", 1); //worksheet number QAxObject* usedrange = worksheet->querySubObject("UsedRange"); QAxObject* rows = usedrange->querySubObject("Rows"); QAxObject* columns = usedrange->querySubObject("Columns"); int intRowStart = usedrange->property("Row").toInt(); int intColStart = usedrange->property("Column").toInt(); int intCols = columns->property("Count").toInt(); int intRows = rows->property("Count").toInt(); m_row = intRows; m_col = intCols; QAxObject * cell; for (int i = intRowStart; i < intRowStart + intRows; i++) { for (int j = intColStart; j < intColStart + intCols; j++) { Position pos(i, j); cell = m_excel->querySubObject("Cells(Int, Int)", i, j ); QVariant cellValue = cell->dynamicCall("value"); m_mapdata.insert(std::pair<Position, std::string>(pos, cellValue.toString().toStdString())); } } m_excel->setProperty("DisplayAlerts", 0); workbook->dynamicCall("Save(void)"); workbook->dynamicCall("Close (Boolean)", false); m_excel->setProperty("DisplayAlerts",1);}
----
阅读全文
0 0
- Qt读取excel的代码,已经封装好了
- 封装poi读取excel的超强工具类,支持一行代码获取excel内容
- QT读取Excel 简单范例代码
- python 读取 excel 的方法封装
- 读取已经存在的excel文件并将其导出
- 给大家分享一个在Android中获取验证码的倒数计时器,已经封装好了,直接引用就行。
- 软件的大模样已经好了。
- 现在的搜索已经足够好了吗?
- PostGreSQL的全文搜索已经足够好了
- Postgres 的全文检索已经足够好了
- QT读取excel
- Qt读取Excel 一
- Qt读取excel表格
- QT读取excel
- Qt读取excel文件
- Qt读取excel
- Qt读取excel
- poi读取excel封装例子
- 机器学习&深度学习资料分享
- java模拟并发请求测试方法是否线程安全
- 2017.6.19-python学习-stringIO和byteIo
- CPU卡实验_百度文章
- POJ3276-Face The Right Way
- Qt读取excel的代码,已经封装好了
- CSS选择器
- 一个 11 行 Python 代码实现的神经网络
- LeetCode 621. Task Scheduler
- Android程序签名打包
- 618大促,大数据看三大电商平台哪家最适合“剁手”?
- jstack分析最耗CPU的代码
- RxAndroid 与 Retrofit的使用
- opencv将三张单通道图合成为一张三通道图并保存