Qt中csv文件的导入与导出
转自:http://blog.csdn.net/mingxia_sui/article/details/7683030
CSV
1.简介:
全称:Comma Separated Values。
是“逗号分隔值”的英文缩写,通常是纯文本文件,一般用wordWPS或是记事本打开。
2.规则:
(1)开头不留空,以行为单位。
(2)可含或不含列名,含列名则居文件第一行。
(3)一行数据部跨行,无空行。
(4)以半角逗号作分隔符,列为空也要表达其存在。
(5)列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。
(6)列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
(7)文件读写时引号,逗号操作规则互逆。
(8)内码格式不限,可为 ASCII、Unicode 或者其他。
(9)不支持特殊字符
3.使用:(csv文件的导入导出)
先看下一个基本demo的ui:

(1)获取控件信息导入到csv文件中:
void mainDialog::exportMsg()
{
//获取创建的csv文件名
QString fileName = QFileDialog::getSaveFileName(this, tr("Excel file"), qApp->applicationDirPath (),
tr("Files (*.csv)"));
if (fileName.isEmpty())
return;
//打开.csv文件
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
std::cerr << "Cannot open file for writing: "
<< qPrintable(file.errorString()) << std::endl;
return;
}
QTextStream out(&file);
//获取数据
QString sName = ui->lineEdit->text();//姓名
Int iAge = ui->spinBox->tvalue();//年龄
out << tr("姓名:,") << sName << ",\n";
out << tr("年龄:,") << iAge << ",\n";
out << tr("1,") << tr("2,")<< tr("3,") << tr("4,") <<",\n";//表头
//获取表格内容
int row = ui->tableWidget->rowCount();//表格总行数
for(int i = 0; i < row; i ++)
{
for(int col = 0; col < 4; col++)
{
QString string = ui->tableWidget->item(i, col)->text();
out << string << ",";// 写入文件
}
out << "\n";
}
QMessageBox::information(this, tr("导出数据成功"), tr("信息已保存在%1!").arg(fileName), tr("确定"));
file.close();
}
这就是导出之后.csv文件中的内容:

(2)将csv文件中信息导入控件:
void mainDialog::importMsg()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Excel file"), qApp->applicationDirPath (),
tr("Files (*.csv)"));
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
std::cerr << "Cannot open file for reading: "
<< qPrintable(file.errorString()) << std::endl;
return;
}
QStringList list;
list.clear();
QTextStream in(&file);
int i =0;
while(!in.atEnd())
{
QString fileLine = in.readLine();
list = fileLine.split(",", QString::SkipEmptyParts);
//姓名
if(i == 0) ui->lineEdit->setText(list.at(1));
//年龄
if(i == 1) ui->spinBox->setValue(list.at(1));
//表头
if(i == 2) ui->tableWidget->setHorizontalHeaderLabels(QStringList() << list.at(0) << list.at(1)
<< list.at(2) << list.at(3);
//表内容
if(i == 3)
{
for(int a = 0; a < 4; a++)
{
ui->tableWidget->setItem(0, a, new QTableWidgetItem(list.at(a)));
}
}
if(i > 3)
{
for(int b = 0; b < 4; b++)
{
ui->tableWidget->setRowCount(i-2);//设置添加一行
ui->tableWidget->setItem(i-3, b, new QTableWidgetItem(list.at(b)));
}
}
i++;
}
file.close();
}
好了,完成啦。。。
Qt中csv文件的导入与导出的更多相关文章
- ACCESS表与CSV文件相互导入、导出的SQL语句
一.将ACCESS表导出为CSV文件:Select * INTO [TEXT;FMT=CSV;DELIMITED;HDR=YES;DATABASE=E:\temp\].test.csv FROM Sh ...
- [Excel] CsvHelper---C#关于CSV文件的导入和导出以及转化 (转载)
点击下载 CsvHelper.rar 这个类是关于Csv文件的一些高级操作1.DataTable导出到CSV2.将Csv读入DataTable看下面代码吧 /// <summary> // ...
- mysql中csv文件的导入导出
导出例子: select *from testinto outfile 'D:test.csv'fields terminated by ',' optionally enclosed by '&qu ...
- 前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件
在之前的文章中,我们为大家分别详细介绍了在JavaScript.React中使用SpreadJS导入和导出Excel文件的方法,作为带给广大前端开发者的"三部曲",本文我们将为大家 ...
- csv文件批量导入数据到sqlite。
csv文件批量导入数据到sqlite. 代码: f = web.input(bs_switch = {}) # bs_switch 为from表单file字段的namedata =[i.split( ...
- Oracle学习——dmp文件(表)导入与导出
Oracle学习——dmp文件(表)导入与导出 2014-12-28 0个评论 来源:张文康 廊坊师范学院信息技术提高班 第九期 收藏 我要投稿 前言 关于dmp文件我们用的 ...
- 使用PHPExcel实现Excel文件的导入和导出(模板导出)
在之前有写过一篇文章讲述了使用PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是:1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽度 ...
- Weka里如何将arff文件或csv文件批量导入MySQL数据库(六)
这里不多说,直接上干货! 前提博客是 Weka中数据挖掘与机器学习系列之数据格式ARFF和CSV文件格式之间的转换(四) 1.将arff文件批量导入MySQL数据库 我在这里,arff文件以Weka安 ...
- 第32课 Qt中的文件操作
1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...
随机推荐
- Excel表格数据导入Mysql数据库的方法
1.使用Navicat 连接需要导入的数据库. 2.excel 列的名字最好和数据库的名字一致,便于我们直观的查看好理解. 第一步,先创建好表,和准备好对应的excel文件.在Navicat 中选 ...
- window下Jira+SQL Server部署+汉化+破解
网上很多都是jira+mysql部署的文章,由于我现在有需求要用SQL Server数据库,因此就动手试了一下,参考网上许多文章,再加上自己的几次尝试,很快也成功了,分享出来. 全文章节: 一.事前准 ...
- vs2015编译EasyDarwin开源流媒体服务器Linux版本调研
本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/51843196 之前InfoQ的一篇文章提到用vs ...
- javaweb开发之javaBean
一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...
- inode ls -li 显示索引节点
ls -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. --a ...
- java中Integer在JDK1.6和JDK1.7中的区别
运行下面这段代码: System.out.println(Integer.valueOf("127")==Integer.valueOf("127")); Sy ...
- R in Action(1) 基本数据结构
一数据类型 R的数据类型包括数值型.字符型.逻辑型(布尔).复数型和原生型,同时R有好多存储数据的对象类型,包括标量.向量.矩阵.数组.数据框和列表,如下图所示下图(图的版权神马的归原作者跟原出版社所 ...
- LVS的体系结构
LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 转自LVS官方资料 2002 年 4 月 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并讨论了其的设 ...
- Hamming校验码
可参考:http://winda.blog.51cto.com/55153/1068000 Hamming校验码作用:用于校验通信数据,防止出现错误,并具有一定的纠错功能. 汉明码在传输的消息流中插入 ...
- seventBus(封装) 一个巧妙的解决vue同级组件通讯的思路
如果在你项目中需要多处用到同级组件通讯,而又不想去写繁琐的vuex,可以参考这个小思路.本人在写项目中琢磨出来的,感觉挺好用,分享一下. 1.在utils文件夹下添加BusEvent.js 注释已经很 ...