曾经为qt不能直接导出excel而困扰,后来经过深入了解,得知qt支持xml国际语言,html是xml的一种。html是做网页的,相信大家比较熟悉。所以使用html的
生成表格。然后导出html格式文件。或者直接导出xls格式。excel是能够直接识别的。下附简短代码:
//初始化QTextEdit里面的内容
void MainWindow::initText()
{
QString begin = QString::fromLocal8Bit("
表格测试 | |||||||
序号 | 日期 | 飞机 | 大炮 | 火箭 | 轮船 | 汽车 | 我的自行车 |
QString mid = QString::fromLocal8Bit("
%1%2%3%4%5%6%7%8");QString end = QString::fromLocal8Bit("
");QString mid2 = mid.arg(1).arg(2).arg(3).arg(4).arg(5).arg(6).arg(7).arg(8);
QString mid3 = mid.arg("a").arg("b").arg("c").arg("d").arg("e").arg("f").arg("g").arg("h");
begin.append(mid2);
begin.append(mid3);
begin.append(end);
textEdit->setText(begin);
}
//保存文件对话框(对于某些格式QTextDocumentWriter可直接保存,其他不支持的格式就用QTextStream以流的形式保存 )
void MainWindow::on_actionSave_as_triggered()
{
QString fn = QFileDialog::getSaveFileName(this, tr("Save as..."),
QString(), tr("EXCEL files (*.xls);;ODS files (*.ods);;ODF files (*.odt);;HTML-Files (*.htm *.html);;All Files (*)"));
if (fn.isEmpty())
return;
if (! (fn.endsWith(".xls", Qt::CaseInsensitive)||fn.endsWith(".odt", Qt::CaseInsensitive) || fn.endsWith(".htm", Qt::CaseInsensitive) || fn.endsWith(".html", Qt::CaseInsensitive)|| fn.endsWith(".ods", Qt::CaseInsensitive)) )
fn += ".xls"; // default
if (fn.endsWith(".odt", Qt::CaseInsensitive)){
QTextDocumentWriter writer(fn);
writer.write(textEdit->document());
}else{
QFile index(fn);
if (index.open(QFile::WriteOnly | QIODevice::Text))
{
QTextStream liu(&index);
liu.setCodec("UTF-8");
liu<document()->toHtml("UTF-8");
}
}
}