加载中…
个人资料
梧桐下的约定
梧桐下的约定
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,032
  • 关注人气:18
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

QT 中数据源数据导出Excel的问题(转)

(2012-11-13 09:49:26)
标签:

杂谈

分类: QT日志

我很庆幸找到了一篇关于如何将TableView中的数据导出到Execl的文章。但是 很多时候我们需要导出大量数据作为备份。或者需要姜数据库中成千上万的数据导出而在QT页面中只是显示你查询数据的中的符合要求的一页数据即可。那么我门就需要直接将 后台数据经客户端(QT)查询后导出。我的项目在开发中 后台数据库用的MYSQL  在客户端(QT)数据查询采用QSqlQueryModel。

今天的示例主要是如何利用QT 操作Excel、根据  “将TableView中的数据导出到Execl的文章”中的思想 。我们也是把Excel当作一个数据库。利用ODBC将其打开。

示例源码:

 

int ce::excel(QString fileName ){


    QString sheetName;

    sheetName="mydatas";

    qDebug() <<"fileName"<<fileName;

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "excelexport");

    if(!db.isValid())

    {

        qDebug() << "export2Excel failed: QODBC not supported.";

        return -2;

    }

    // set the dsn string

    QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%1\";DBQ=%2").

                  arg(fileName).arg(fileName);

    db.setDatabaseName(dsn);

    if(!db.open())

    {

        qDebug() << "export2Excel failed: Create Excel file failed by DRIVER={Microsoft Excel Driver (*.xls)}.";

        QSqlDatabase::removeDatabase("excelexport");

        return -3;

    }


    QSqlQuery query(db);


    //drop the table if it's already exists

    QString  sSql = QString("DROP TABLE [%1] ").arg(sheetName);

    query.exec(sSql);


    //create the table (sheet in Excel file)

    sSql = QString("CREATE TABLE [%1] (").arg(sheetName);

    sSql+="[网名] char(20) , [网站网址] char(20) ,[QQ号] char(20) ";

    sSql += ")";


    qDebug()<<"sSql"<<sSql;

    query.prepare(sSql);


    if(! query.exec())

    {

        qDebug() << "export2Excel failed: Create Excel sheet failed.";

        db.close();

        QSqlDatabase::removeDatabase("excelexport");

        return -4;

    }

    sSql =QString("INSERT INTO [%1] (").arg(sheetName);

    query.prepare( sSql+" 网名, 网站网址, QQ号) "

                       "VALUES (:name, :web, :qq)");

         query.bindValue(":name", "SatSun Studio");

         query.bindValue(":web", "http://www.satsuns.com");

         query.bindValue(":qq", 603031225);

         query.exec();

    return 1;

}

如何调用:

 

QString fileName = QFileDialog::getSaveFileName(this, tr("Excel file"), qApp->applicationDirPath (),

                                                   tr("Excel Files (*.xls)"));

   if (fileName.isEmpty())

       return;


   QMessageBox::about(this, tr("您将要建立的Excel文件"), fileName );

   if (excel(fileName)>0 )//调用导出Excel方法

   {

       QMessageBox::about(this, tr("Excel文件 导出完成"), fileName );

       QSqlDatabase::removeDatabase("excelexport");

   }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有