it编程 > 网页制作 > 网页播放器

Qt将数据库中的数据导出为html

151人参与 2024-12-28 网页播放器

一、源码分享

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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

.NET使用C#实现将Word文档转换为HTML格式

01-20

如何使用正则去掉html中标签与标签之间的空格

11-26

C#实现轻松从HTML中提取纯文本

11-13

VScode访问HTML页面时相对位置正确但图片却加载不出来的解决办法

10-17

使用 Open XML SDK 实现 html 富文本转换为 docx 格式示例

09-17

使用Cesium加载和调整本地数据的3D Tiles点云

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论