Qt通过ODBC读取excel文件

之前替学校考试科用C++ Builder做过一个小的数据库工具,处理excel表格用的,现在想转换到Qt平台下来,在网上搜了搜有一些利用OBDC读取xls文件的教程:

http://hi.baidu.com/kxw102/item/770c496d5736470ca0cf0f1d

http://blog.sina.com.cn/s/blog_55758bcf0100d4lm.html

试了一下可以用,但是转换到图形界面中遇到点问题,在用QSqlTableModel类的setTable()方法使无法读取到[Sheet1$]表格,将其换为QsqlQueryModel后问题解决。代码如下:

头文件mainWindow.h:

#ifndef mainWindow_H
#define mainWindow_H

#include <QWidget>
#include <QTextEdit>
#include <QSqlQueryModel>

class QSqlTableModel;
class QTableView;

enum {
    Id = 0,
    Eat = 1,
    Taxi = 2,
    Train = 3
};

class mainWindow : public QWidget
{
    Q_OBJECT

public:
    mainWindow();
    bool createConnection();
    void createFakeData();
    void printMessage(QString message);

private:
    QSqlQueryModel *model;
    QTableView *view;
    QTextEdit *textEdit;

};

#endif

 

类定义文件mainWindow.cpp:

#include <QtGui>
#include <QtSql>

#include "mainWindow.h"

mainWindow::mainWindow()
{
    textEdit=new QTextEdit();

    if (!createConnection())
        return;

    model = new QSqlTableModel(this);
    model->setQuery("SELECT * FROM [Test$]");
    model->setHeaderData(Eat, Qt::Horizontal, tr("Eat"));
    model->setHeaderData(Taxi, Qt::Horizontal, tr("Taxi"));
    model->setHeaderData(Train, Qt::Horizontal, tr("Train"));

    view = new QTableView;
    view->setModel(model);
    view->setSelectionMode(QAbstractItemView::SingleSelection);
    view->setSelectionBehavior(QAbstractItemView::SelectRows);
    view->setColumnHidden(Id, false);
    view->resizeColumnsToContents();
    view->setEditTriggers(QAbstractItemView::NoEditTriggers);

    QHeaderView *header = view->horizontalHeader();
    header->setStretchLastSection(true);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(view);
    mainLayout->addWidget(textEdit);
    setLayout(mainLayout);
    setWindowTitle(tr("xlsProcessor"));
}

bool mainWindow::createConnection()
{
        QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        db.setDatabaseName("Driver={Microsoft Excel Driver (*.xls)};Readonly=0;DriverId=790;Dbq=D:\\test.xls;DefaultDir=D:\\");
        if (!db.open())
        {
            printMessage(tr("Database Error"));
            return false;
        }
        printMessage(tr("Connected Successed!"));
        return true;
}

void mainWindow::printMessage(QString message)
{
    textEdit->append(message);
}

 

最终效果:

 

转载于:https://www.cnblogs.com/guaipojushi/archive/2012/11/18/2775995.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值