PDA

View Full Version : copy tableview to Excel



Arend
9th December 2012, 11:17
Hello,

I want to copy data from of a QTableview to Excel, below I have an example of such a table.
I tried several examples found on the internet, but I can't get it working.
Can someone give me a working example?

Regards,
Arend




#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QStandardItemModel"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStandardItemModel *model = new QStandardItemModel(3,3,this);

model->setHorizontalHeaderItem(0, new QStandardItem(QString("Column1 Header")));
model->setHorizontalHeaderItem(1, new QStandardItem(QString("Column2 Header")));

QStandardItem *firstRow = new QStandardItem(QString("1"));
QStandardItem *secondRow = new QStandardItem(QString("2"));

model->setItem(0,0,firstRow);
model->setItem(1,0,secondRow);

ui->tableView->setModel(model);
}


MainWindow::~MainWindow()
{
delete ui;
}

wysota
9th December 2012, 12:28
What have you tried so far?

Arend
9th December 2012, 14:18
So far I tried this.
I want to use ctrl-c and ctrl-v when I have selected a column or two.

Thanks for your help,
Arend



#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QStandardItemModel"
#include "QAbstractItemModel"
#include "QItemSelectionModel"
#include "QKeyEvent"
#include "QKeySequence"
#include "QClipboard"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStandardItemModel *model = new QStandardItemModel(3,3,this);
model->setHorizontalHeaderItem(0, new QStandardItem(QString("Column1 Header")));
model->setHorizontalHeaderItem(1, new QStandardItem(QString("Column2 Header")));

QStandardItem *firstRow = new QStandardItem(QString("1"));
QStandardItem *secondRow = new QStandardItem(QString("2"));

model->setItem(0,0,firstRow);
model->setItem(1,0,secondRow);

ui->tableView->setModel(model);

QAbstractItemModel *abmodel = ui.tableview->model();
QItemSelectionModel *model = ui.tableview->selectionModel();
QModelIndexList list = model->selectionIndexes();
qSort(list);
QModelIndex index = list.first();
for(int i = 0; i < list.size(); i++)
{
QModelIndex index = list.at(i);
QString text = abmodel->data(index).toString();
copy_table.append(text);

if(index.row() != previous.row())
{
copy_table.append('\n');
}
else
{
copy_table.append('\t');
}

previous = index;
}

QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(copy_table);

}

MainWindow::~MainWindow()
{
delete ui;
}

wysota
9th December 2012, 22:58
You need to use text/csv as the mime-type instead of text/plain which is used when you call QClipboard::setText(). Use QClipboard::setMimeData() instead.