一、源码分享
bool reportformutils::exportreporthtml(qstring &errstring, const qstring tablename, const qstring savepathandname, const qstring tabletitle, const qstring tableinfo)
{
q_unused(errstring)
q_unused(tablename)
q_unused(savepathandname)
#define single_opt_row 1000
qstring cmd;
quint32 i,j;
quint32 row,col;
bool occererror = false;
qstring filewritecontent;
//判断文件是否存在
qfile file(savepathandname);
if(!file.open(qiodevice::writeonly | qiodevice::text))
{
errstring = tr("文件打开失败!");
return false;
}
qtextstream out(&file);
out << qstring("<!doctype html>") << qt::endl;
out << qstring("<html>") << qt::endl;
out << qstring("<head>") << qt::endl;
out << qstring("<meta charset=\"utf-8\">") << qt::endl;
out << qstring("<title>");
out << tabletitle << qstring("</title>") << qt::endl;
out << qstring("</head>") << qt::endl;
out << qstring("<body>") << qt::endl;
out << qstring(tableinfo) << qt::endl;
out << qstring("<table border=\"1\">") << qt::endl;
sqlitehelper* sqlhelper = sqlitehelper::getinstance();
qsqldatabase *db = sqlhelper->getdatabase();
qsqlquery sqlquery(*db);
qsqlrecord record;
//开始设置表头
cmd =qstring("select * from %1").arg(tablename);
sqlquery.prepare(cmd);
if(!sqlquery.exec())
{
errstring = tr("数据库表头获取失败!");
occererror = true;
goto exit;
}
record = sqlquery.record();
col = record.count(); //获取列数
//qdebug()<<"col:"<<col;
//写入表头
out << qstring("<tr>") << qt::endl;
for(i=0;i<col;++i)
{
out << formatcell(record.fieldname(i)) << qt::endl;
}
out << qstring("</tr>") << qt::endl;
//获取数据行数
cmd =qstring("select count(*) from %1;").arg(tablename);
sqlquery.prepare(cmd);
if(!sqlquery.exec())
{
errstring = tr("数据库行数获取失败!");
occererror = true;
goto exit;
}
sqlquery.next();
row = sqlquery.value(0).toint();
//开始导出数据
for(i =0;i < row; i+=single_opt_row)
{
sqlquery.clear();
cmd =qstring("select * from %1 limit %2,%3").arg(tablename).arg(i).arg(single_opt_row);
//qdebug()<<cmd;
sqlquery.prepare(cmd);
if(!sqlquery.exec())
{
errstring = tr("数据库数据获取失败!");
occererror = true;
goto exit;
}
//读取数据
while(sqlquery.next())
{
out << qstring("<tr>") << qt::endl;
for(j=0;j<col;j++)
{
out << formatcell(sqlquery.value(j).tostring()) << qt::endl;
}
out << qstring("</tr>") << qt::endl;
}
}
out << qstring("</table>") << qt::endl;
out << qstring("</body>") << qt::endl;
out << qstring("</html>") <<qt::endl;
qdebug()<<"currentthreadid = "<<qthread::currentthreadid();
exit:
file.close();
db->close();
delete db;
if(occererror)
return false;
return true;
}
void reportformutils::castlistlistvariant2variant(const qlist<qlist<qvariant> > &cells, qvariant &res)
{
qvariantlist vars;
const int rows = cells.size();
for(int i=0;i<rows;++i)
{
vars.append(qvariant(cells[i]));
}
res = qvariant(vars);
}
qstring reportformutils::formatcell(qstring val)
{
qstring outstr = "<td";
//文本对齐
outstr += " align=\"";
outstr += "center";
outstr += "\"";
//跨列
outstr += qstring::asprintf(" colspan=\"%d\"", 1);
//跨行
outstr += qstring::asprintf(" rowspan=\"%d\"", 1);
//背景色 bgcolor
outstr += qstring::asprintf(" bgcolor=\"#%x\"", 0xcce8cf);
outstr += ">";
//内容
if (val.size()) {
outstr += val;
}
outstr += "</td>";
return outstr;
}
二、导出文件查看

三、浏览器查看

到此这篇关于qt将数据库中的数据导出为html的文章就介绍到这了,更多相关qt数据库数据导出为html内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论