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

    }

好了,完成啦。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM