1. 程式人生 > >Qt中csv檔案的匯入與匯出

Qt中csv檔案的匯入與匯出

CSV

1.簡介:

全稱:Comma Separated Values

  是“逗號分隔值”的英文縮寫,通常是純文字檔案,一般用wordWPS或是記事本開啟。

2.規則:

1)開頭不留空,以行為單位。

2)可含或不含列名,含列名則居檔案第一行。

3)一行資料部跨行,無空行。

4)以半形逗號作分隔符,列為空也要表達其存在。

5列內容如存在半形逗號(即,)則用半形引號(即"")將該欄位值包含起來。內容如存在半形逗號(即,)則用半形引號(即"")將該欄位值包含起來。

6列內容如存在半形引號(即")則應替換成半形雙引號("")轉義,並用半形引號(即"")將該欄位值包含起來。 

7

檔案讀寫時引號,逗號操作規則互逆。

(8)內碼格式不限,可為 ASCIIUnicode 或者其他。

(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(== 0) ui->lineEdit->setText(list.at(1));

 //年齡

if(== 1)ui->spinBox->setValue(list.at(1));

//表頭

if(== 2)ui->tableWidget->setHorizontalHeaderLabels(QStringList() << list.at(0) << list.at(1)

<< list.at(2) << list.at(3);

//表內容

if(== 3)

{

for(int a = 0; a < 4; a++)

{

ui->tableWidget->setItem(0, a, new QTableWidgetItem(list.at(a)));

}

}

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

}

好了,完成啦。。。