PDA

View Full Version : [Snippet] QSqlTableModel to CSV Export



ottoshmidt
5th June 2011, 10:35
this code exports data from model (in my case displayed in QTableView) to csv text file, taking into regard the hidden columns;


void MainWindow::csvexport()
{

QString linki = QFileDialog::getSaveFileName(this, tr("Export CSV"),
QDesktopServices::storageLocation(QDesktopServices ::DesktopLocation)+"/base.csv",
tr("Comma Separated Values (*.csv)"));


int x = 0;
QString exportdata;
while (x < model->columnCount()){

if (!ui->tableView->isColumnHidden(x)) {

exportdata.append(model->headerData(x,Qt::Horizontal,Qt::DisplayRole).toStr ing());
//msgbox(exportdata);
if (model->columnCount() - x != 1)
exportdata.append(",");
else
exportdata.append("\n");

}
x++;

}
int z = 0;


while (z < model->rowCount()) {

x = 0;
while (x < model->columnCount()) {
if (!ui->tableView->isColumnHidden(x)) {

exportdata.append(model->data(model->index(z,x),Qt::DisplayRole).toString());

if (model->columnCount() - x != 1)
exportdata.append(",");
else
exportdata.append("\n");

}
x++;

}

z++;
}



QFile file;
if (!linki.isEmpty()) {
file.setFileName(linki);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
}
QByteArray ttext;
ttext.append(exportdata);
file.write(ttext);
}

ottoshmidt
11th June 2011, 20:24
Fixed Bug regarding hidden columns:


QString linki = QFileDialog::getSaveFileName(this, tr("Export CSV"),
QDesktopServices::storageLocation(QDesktopServices ::DesktopLocation)+"/base.csv",
tr("Comma Separated Values (*.csv)"));


int x = 0;
QString exportdata;

int counthidden = 0, jint = 0;

while (jint < model->columnCount()) {

counthidden+=ui->tableView->isColumnHidden(jint);
jint++;
}



while (x < model->columnCount()){

if (!ui->tableView->isColumnHidden(x)) {

exportdata.append(model->headerData(x,Qt::Horizontal,Qt::DisplayRole).toStr ing());
//msgbox(exportdata);
if (model->columnCount() - x != counthidden)
exportdata.append(";");
else
exportdata.append("\n");

}
x++;

}
int z = 0;


while (z < model->rowCount()) {

x = 0;
while (x < model->columnCount()) {
if (!ui->tableView->isColumnHidden(x)) {

exportdata.append(model->data(model->index(z,x),Qt::DisplayRole).toString());

if (model->columnCount() - x != counthidden)
exportdata.append(";");
else
exportdata.append("\n");

}
x++;

}

z++;
}



QFile file;
if (!linki.isEmpty()) {
file.setFileName(linki);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
}
QByteArray ttext;
ttext.append(exportdata);
file.write(ttext);

ottoshmidt
12th June 2011, 16:21
Final and working version:


void MainWindow::csvexport()
{


QString linki = QFileDialog::getSaveFileName(this, tr("Export CSV"),
QDesktopServices::storageLocation(QDesktopServices ::DesktopLocation)+"/errors.csv",
tr("Comma Separated Values (*.csv)"));

int x = 0;
QString exportdata;

int counthidden=0, jint = 0;

while (jint < model->columnCount()) {

counthidden+=ui->tableView->isColumnHidden(jint);
jint++;
}


int w = 1;
while (x < model->columnCount()){

if (!ui->tableView->isColumnHidden(x)) {


exportdata.append(model->headerData(x,Qt::Horizontal,Qt::DisplayRole).toStr ing());


if (model->columnCount() - w > counthidden)
exportdata.append(";");
else {
exportdata.append("\n");

}
w++;
}
x++;

}

int z = 0;

w = 1;
while (z < model->rowCount()) {

x = 0;

w = 1;
while (x < model->columnCount()) {
if (!ui->tableView->isColumnHidden(x)) {


exportdata.append(model->data(model->index(z,x),Qt::DisplayRole).toString());

if (model->columnCount() - w > counthidden)
exportdata.append(";");
else
exportdata.append("\n");

w++;
}
x++;

}

z++;
}





QFile file;
if (!linki.isEmpty()) {
file.setFileName(linki);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
}
QByteArray ttext;
ttext.append(exportdata);
file.write(ttext);
}

wysota
13th June 2011, 01:35
It won't work. What if some cell contains a semicolon or a newline?