Qt从数据库导出到csv文件

技术优势

相比较于导出到excel文件,导出为csv代码更简洁,使用更简单,执行效率更高,且更为稳定。
导出到excel文件还需要引入axcontainer模块,且需要在计算机中安装office软件,在Linux系统中并不适用。因此仅作为数据备份时导出为csv更佳。

Database->csv

QFile csvfile(filepath);
csvfile.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream out(&csvfile);
out<<tr("数据1,")<<tr("数据2,")<<("数据3\n");
out<<tr("value1,")<<tr("value2,")<<tr("value3\n");
//含中文字符的要用tr包裹,否则乱码,元素(单元格)之间用逗号分隔,用\n换行
csvfile.flush();
csvfile.close();

在Linux系统中运行以上代码,生成的csv文件放到windows系统中直接用excel打开会显示乱码,但是直接以文本方式打开显示正常,在记事本中将其另存为ANSI编码后再用excel打开则显示正常。这是犹豫默认保存为utf-8编码引起的,所以若在Linux环境下运行需要在QTextStream out(&csvfile);后添加out.setCodec(QTextCodec::codecForName("GBK"));

csv->Database

QFile csvfile(filepath);
csvfile.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in(&csvfile);
while(!in.atEnd()){
    QString str = in.readLine();
    str.remove("\n");
    QStringList lst = str.split(",");
    qry.bindValue(0,lst.at(0));
    ...
}
csvfile.close();

更多推荐