查看完整版本: [-- Qt快速写Excel,无平台限制 --]

QTCN开发网 -> Qt代码秀 -> Qt快速写Excel,无平台限制 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

zzzzzzhuzhu 2020-03-12 08:58

Qt快速写Excel,无平台限制

  以下代码直接放在函数里测试,补上头文件就可以了。细节意会。写速度很快。
其实写的是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";
    }
[attachment=21436]

shatanzhihu 2020-03-12 09:32
        

tmxfh 2020-03-12 11:39
你应当使用  OpenXml  ,这里有所有的office文件格式目录, 其中 OpenXml SDK 还有配套的工具,可以用目录的方式列出电子表格的内容。
  刚好我最近在研究这个,顺手补充一下 ,望楼主勿怪。
[attachment=21403]

圣域天子 2020-03-12 13:46
两位大神能不能封装个直接使用的完整功能类呀?方便大家使用~~~

big_mouse 2020-03-12 15:03

lzh280 2020-03-24 08:27
    

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



jobfind 2021-03-03 14:38
good

hitzsf 2021-03-21 10:02
  真牛批

jinbo3 2021-03-26 00:07
很厉害


查看完整版本: [-- Qt快速写Excel,无平台限制 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled