QT将TableWidget 导出为excel的几种方法

来源:互联网 发布:淘宝空间图片协议在哪 编辑:程序博客网 时间:2024/06/05 02:07

1.使用OLE

原文链接:http://blog.csdn.net/cool222/article/details/38639647


2.转为html

因为excel识别html中的table 元素,所以可以按下文转换。

缺点:转换后的表格较为难看

void MainWindow::Table2ExcelByHtml(QTableWidget *table){    table->horizontalHeaderItem(0);    //构建html文档内容    QString filepath = QFileDialog::getSaveFileName(this, tr("Save as..."),            QString(), tr("EXCEL files (*.xls *.xlsx);;HTML-Files (*.htm *.html);;"));    QString Begin = QString::fromLocal8Bit("<html><head></head><body><table border=\"1\" >");    QString end = QString::fromLocal8Bit("</table></body></html>");    QList<QString> list;    int row = table->rowCount();    int col = table->columnCount();/*  //若有列标题,取消此部分注释    QString header = "<tr>";    for(int i=0;i<col;i++)    {        QString cel = table->horizontalHeaderItem(i)->text();        header += QString("<td>%1</td>").arg(cel);    }    header += "</tr>";    list.push_back(header);*/    for(int i=0;i<row;i++)    {        QString rowStr = "<tr>";        for(int j=0;j<col;j++)        {            QString cel = table->item(i,j)->text();            rowStr += QString("<td>%1</td>").arg(cel);        }        rowStr += "</tr>";        list.push_back(rowStr);    }    QString text = Begin;    for(int i=0;i<list.size();++i)    {        text.append(list.at(i));    }    text.append(end);    QTextEdit textEdit;    textEdit.setText(text);    QFile file(filepath);    if(file.open(QFile::WriteOnly | QIODevice::Text))    {        QTextStream ts(&file);        ts.setCodec("UTF-8");        ts<<textEdit.document()->toHtml("UTF-8");    }}


3.转换为制表符文件

同上,因为EXCEL可以以tab识别单元格,导出后的样式比上个方法较为好看。

void MainWindow::Table2ExcelByTxt(QTableWidget *table){    QString filepath = QFileDialog::getSaveFileName(this, tr("Save as..."),            QString(), tr("EXCEL files (*.xls *.xlsx);;HTML-Files (*.txt);;"));    int row = table->rowCount();    int col = table->columnCount();    QList<QString> list;    //添加列标题    QString HeaderRow;    for(int i=0;i<col;i++)    {        HeaderRow.append(table->horizontalHeaderItem(i)->text()+"\t");    }    list.push_back(HeaderRow);    for(int i=0;i<row;i++)    {        QString rowStr = "";        for(int j=0;j<col;j++){            rowStr += table->item(i,j)->text() + "\t";        }        list.push_back(rowStr);    }    QTextEdit textEdit;    for(int i=0;i<list.size();i++)    {        textEdit.append(list.at(i));    }    QFile file(filepath);    if(file.open(QFile::WriteOnly | QIODevice::Text))    {        QTextStream ts(&file);        ts.setCodec("UTF-8");        ts<<textEdit.document()->toPlainText();        file.close();    }}



0 0
原创粉丝点击