使用Qt从excel读取数据至数据库

原创 2016年06月01日 13:13:20

一、前言

本文介绍了一种在Qt平台将excel表格的数据读取至数据库QSQLite的方法。思路为:先将excel表格转为csv文件,若原表格中存在着中文,还需将csv的编码格式转为UTF-8,接着由QFile打开该csv文件,将每一行的数据读出,并写入创建的数据库表格。

二、将excel表格转为csv文件

首先需要将保存了需要读取至数据库的excel表格保存为csv文件,如下为实例excel表格,直接另存为csv文件。这里excel保存的是身份证前6位对应的地区名。


由于excel中存在中文,故需将编码格式改为UTF-8,用记事本打开csv文件,然后在文件->另存为,设置如下,另存为sfzqjw_UTF8.csv文件


三、Qt读取csv中数据并保存至新建数据库的表中

<span style="font-size:18px;">//connection.h
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QFile>
#include <iostream>
#include <QTextStream>
#include <QDebug>

static bool createConnection()
{
    //读取csv数据到数据表
    QFile file("E:/PracticeOfQt/Id_recognition/sfzqjw_UTF8.csv"); //打开csv文件
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
     {
          std::cerr << "Cannot open file for reading: "
                    << qPrintable(file.errorString()) << std::endl;
          return false;
     }

      //将csv_utf8转为数据库中的表District保存
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("mydb.db");
    if(!db.open())
    {
        QMessageBox::critical(0 , "Can not open database",
                              "Unable to establish a database connection.",QMessageBox::Cancel);
        std::cerr<<"stop!";
        return false;
    }

    QSqlQuery query;  //默认打开
    query.exec("create table District(id int primary key, province varchar(25),"
               "city varchar(25),county varchar(25))");

    QStringList list;
    list.clear();
    QTextStream in(&file);  //QTextStream读取数据

    int idNumber;

    while(!in.atEnd())
    {
       QString fileLine = in.readLine();  //从第一行读取至下一行
       list = fileLine.split(",", QString::SkipEmptyParts);

       idNumber = list.at(4).toInt();
       query.prepare("INSERT INTO District (id, province,city,county) VALUES (:idVal,:Pro,:City,:County)"); //准备执行SQL查询
       query.bindValue(":idVal", idNumber);   //绑定要插入的值
       query.bindValue(":Pro", list.at(1));
       query.bindValue(":City", list.at(2));
       query.bindValue(":County", list.at(3));

       query.exec();
    }
    query.clear();
    db.close();

    return true;
}</span>

四.在main函数中由SQL条件查询查询数据库中对应的地区

Main函数首先运行了connection.h中createConnection()函数,读取csv中数据并保存至新建数据库的表中,接着打开已创建的数据库mydb.db,由条件查询查询id对应的地区,由qDebug()输出。
<span style="font-size:18px;">//main.cpp
#include "connection.h"
#include <QApplication>
#include <QDebug>
#include <QVariant>
#include <QSqlDatabase>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    if(!createConnection())
    {
        std::cerr<<"Can not create connection";
        return -1;
    }

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("mydb.db");
    if(!db.open())
    {
        QMessageBox::warning(NULL,QObject::tr("初始化数据库"),QObject::tr("数据库文件打开故障!"));
    }
    QSqlQuery query(db);

    int queryId = 441223;  //要查询的身份证前6位,保存至变量
    query.prepare("select * from District WHERE id ==? "); //id号码唯一的
    query.addBindValue(queryId);  //query的绑定机制绑定变量
    query.exec();

    QString place = "";
    while(query.next())
    {
        for(int i = 1; i < 4 ;++i)
            place += query.value(i).toString();
    }
    qDebug()<<"编号为"<<queryId<<"的发证地为"<<place;

    db.close(); //关闭数据库

    return a.exec();
}</span>

五、运行结果

Main函数中设置了查询编号441223对应的身份证所在市县,qDebug()输出结果如下:


版权声明:本文为博主原创文章,未经博主允许不得转载。

Qt解析Excel文件并将数据插入远程数据库MySQL

因为 需求,这两天自己试着用Qt链接了远程数据库MySQL,其中更是算出多多啊。ipServer = ip; //远程数据库的IP portServer ...

Qt5 import Excel data

#ifndef ZEXCELPARSER_H #define ZEXCELPARSER_H #include #include #include #include typede...

QtXlsx使用方法(强大的Excel)

今天有幸了解到QtXlsx:http://qtxlsx.debao.me/ 一个强大的对Excel的操作,不仅跨平台,而且不需要安装Excel,读写速度杠杠的。 但是用它的话,还得稍微配置下,查询...

Qt读取/写入Excel数据--QAxObject

效果图: QT += core gui axcontainer CONFIG += qaxcontainergreaterThan(QT_MAJOR_VERSION, 4): QT ...

QT操纵excel详解2:实现对excel的全面控制

Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。...

Qt Xlsx ( QtXlsxWriter ) qt读写excel文件库的windows安装使用

声明,我的Qt版本为5.7 (x64) qt对于excel的读写过于繁琐使用,但是 Qt Xlsx Module 某块提供了读写Excel 文件的类.其不需要安装 Microsoft Excel...

qt之读写excel

qt版本是qt5.5, 需先在.pro文件下添加axcontainer组件QT += core gui axcontainer 其次,读写excel一般流程: // ste...

Qt导出Excel封装到一个类中

//基于http://blog.csdn.net/w_ww_w/article/details/9167573的主体 //头文件 #ifndef EXPORTEXCEL_H #define EXPO...

QT操控excel1:如何实现读取excel文件的任意一行一列的值

首先要告诉大家的是这个事非常简单,不需大家自己去安装各种包啥的了。 只需要安装了QT就行,然后在pro文件里面加上一行 CONFIG+= qaxcontainer 接着我们在MainWindow....

QtXlsxWriter--开源库的使用

QtXlsxWriter–开源库的使用1.说明 QtXlsxWriter是在Qt中使用的开源库,主要目的生成excel文件,生成报表。 2. 下载地址 从github下载 https://github...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Qt从excel读取数据至数据库
举报原因:
原因补充:

(最多只允许输入30个字)