• 4738阅读
  • 9回复

Qt快速写Excel,无平台限制 [复制链接]

上一主题 下一主题
离线zzzzzzhuzhu
 

只看楼主 倒序阅读 楼主  发表于: 2020-03-12
  以下代码直接放在函数里测试,补上头文件就可以了。细节意会。写速度很快。
其实写的是xml格式的文本。。。具体应该写什么内容,可以打开一个xml,改好格式,再用文本编辑器打开,反推。
QElapsedTimer timer;
    timer.start();
    QString excelXMLStringBuilder;
    //构造好excelXML的头
    excelXMLStringBuilder
            .append("<?xml version=\"1.0\"?><?mso-application progid=\"Excel.Sheet\"?><Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:html=\"http://www.w3.org/TR/REC-html40\"><Worksheet ss:Name=\"学生表\"><Table>");
    //输出好表头
    excelXMLStringBuilder
            .append("<Row><Cell><Data ss:Type=\"String\">学号</Data></Cell><Cell><Data ss:Type=\"String\">姓名</Data></Cell><Cell><Data ss:Type=\"String\">班级</Data></Cell></Row>");
    //构造出每一行
    for (int i = 0; i < 100000; i++) {
        //先构造出<Row>节点
        excelXMLStringBuilder.append("<Row>");

        excelXMLStringBuilder.append("<Cell><Data ss:Type=\"String\">"+ QString::number(i)
                                     + "</Data></Cell><Cell><Data ss:Type=\"String\">"+ QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch())
                                     + "</Data></Cell><Cell><Data ss:Type=\"String\">"+ "text"
                                     + "</Data></Cell><Cell><Data ss:Type=\"String\">"+ "123"
                                     + "</Data></Cell>"
                                     );
        excelXMLStringBuilder.append("</Row>");
    }
    //再构造好excelXML的尾
    excelXMLStringBuilder.append("</Table></Worksheet></Workbook>");

    QFile file;
    file.setFileName("log.xls");
    if (file.open(QIODevice::ReadWrite | QIODevice::Append))
    {
        QTextStream out(&file);
        out.setCodec("utf-8");
        out << excelXMLStringBuilder;
        file.flush();
        file.close();
        qDebug() << "operation took" << timer.elapsed() << "milliseconds";
    }

9条评分好评度+2贡献值+3金钱+11威望+2
jobfind 好评度 +1 good 2021-03-03
jobfind 贡献值 +1 good 2021-03-03
jobfind 威望 +1 good 2021-03-03
jobfind 金钱 +1 good 2021-03-03
shunzhang 贡献值 +1 - 2020-05-14
20091001753 好评度 +1 - 2020-03-12
20091001753 贡献值 +1 - 2020-03-12
20091001753 威望 +1 - 2020-03-12
20091001753 金钱 +10 - 2020-03-12
离线shatanzhihu

只看该作者 1楼 发表于: 2020-03-12
        
离线tmxfh

只看该作者 2楼 发表于: 2020-03-12
你应当使用  OpenXml  ,这里有所有的office文件格式目录, 其中 OpenXml SDK 还有配套的工具,可以用目录的方式列出电子表格的内容。
  刚好我最近在研究这个,顺手补充一下 ,望楼主勿怪。

4条评分好评度+1贡献值+1金钱+10威望+1
20091001753 好评度 +1 - 2020-03-12
20091001753 贡献值 +1 - 2020-03-12
20091001753 威望 +1 - 2020-03-12
20091001753 金钱 +10 - 2020-03-12
哥来了
离线圣域天子

只看该作者 3楼 发表于: 2020-03-12
两位大神能不能封装个直接使用的完整功能类呀?方便大家使用~~~
离线big_mouse

只看该作者 4楼 发表于: 2020-03-12
离线lzh280

只看该作者 5楼 发表于: 2020-03-24
    
离线bigma

只看该作者 6楼 发表于: 2021-02-06
如果说表格没有什么格式要求,可以采用csv格式,就是个普通文本,用逗号隔开,需要换行的将内容用双引号包起来。csv文件用excel打开另存为即可


离线jobfind

只看该作者 7楼 发表于: 2021-03-03
good
离线hitzsf

只看该作者 8楼 发表于: 2021-03-21
  真牛批
离线jinbo3

只看该作者 9楼 发表于: 2021-03-26
很厉害
快速回复
限100 字节
 
上一个 下一个