Qt中csv文件的导入与导出

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();

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值