您的位置:首页 > 编程语言 > Qt开发

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

2015-04-22 10:42 691 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt excel