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.
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();
}
好了,完成啦。。。