Esportare una QTableWidget in CSV

Esportare una QTableWidget in CSV

Oggi vediamo un semplice metodo per esportare una QTableWidget in CSV.

Sarà un esempio basico, nel senso che ci limiteremo a buttare dentro dati estratti, senza nessun tipo di formattazione.

Io mi sono creato una classe apposita (SaveTable) che in input si prende il path di salvataggio del file, e la QTableWidget de leggere.

Questo il file di intestazione:

#ifndef SAVETABLE_H
#define SAVETABLE_H

#include <QObject>
#include <QTableWidget>
#include <QFile>
#include <QDir>
#include <QTextStream>

class SaveTable {
public:
    SaveTable(QString strFile, QTableWidget *tbl);
    virtual ~SaveTable();
};

#endif // SAVETABLE_H

Abbiamo solo il costruttore, dove andremo a svolgere le operazioni.

Ovviamente è migliorabile (non dovrebbe fare I/O ad esempio), ma per fare un esempio volante va più che bene.

Questo il file di implementazione:

#include "savetable.h"

SaveTable::SaveTable(QString strFile, QTableWidget *tbl) {
    QFile file(strFile);
    if (file.open(QFile::WriteOnly | QFile::Truncate)) {
        QTextStream stream(&file);
        QStringList strList;
        for (int i = 0; i < tbl->columnCount(); i++) {
            strList << "" " + tbl->horizontalHeaderItem(i)->data(Qt::DisplayRole).toString() + "" ";
        }
        stream << strList.join(";") + "n";
        for (int i = 0; i < tbl->rowCount(); i++) {
            strList.clear();
            for (int j = 0; j < tbl->columnCount(); j++) {
                QTableWidgetItem *item = tbl->item(i, j);
                if (!item || item->text().isEmpty()) {
                    tbl->setItem(i, j, new QTableWidgetItem("0"));
                }
                strList << "" " + tbl->item(i, j)->text() + "" ";
            }
            stream << strList.join(";") + "n";
        }
        file.close();
    }
}

SaveTable::~SaveTable(){
}

In pratica, prima cicliamo sulle colonne, per riempire la prima riga.

Poi sotto, andiamo a ciclare sulle righe.

In questo modo, riempiamo il file senza preoccuparci di com'è strutturata la QTableWidget.

A questo punto, basta richiamare il tutto:

SaveTable st("/path/dove/salvare/file.csv, tbl);

Enjoy!