• 9939阅读
  • 3回复

qt下如何调用excel的制图功能 [复制链接]

上一主题 下一主题
离线belinda
 
只看楼主 正序阅读 楼主  发表于: 2009-01-20
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
qt下生成的统计数据想直接利用excel中的制作统计图,该怎么调用呢?有用过的大侠帮帮我吧
离线never_ql
只看该作者 3楼 发表于: 2010-07-28
哎,我也遇到同样的问题,不过我是想用对应的数据域的数据生成曲线。遇到问题了,在设置曲线图的属性时,不知道该怎么用QT提供的dynamicCall和querySubObject函数去调用ActiveX的接口提供的,设置曲线图属性的函数。先给代码:

#include <QtGui>
#include <QAxObject>
#include <QAxWidget>
#include <qaxselect.h>
int main(int argc, char **argv)
{
    QApplication a(argc, argv);
    QAxWidget excel("Excel.Application");
    excel.setProperty("Visible", true);//显示当前窗口
    QAxObject * workbooks = excel.querySubObject("WorkBooks");//获取excel的集合指针
    QAxObject *workbook = workbooks->querySubObject("Open (const QString &)",QString("c:/test.xls"));//打开指定路径的xls文档
    QAxObject * worksheets = workbook->querySubObject("WorkSheets");//获取sheets的集合指针
        QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)",1);
        QAxObject * chartobjects = worksheet->querySubObject("ChartObjects");//获取ChartObjects的集合指针
    QAxObject *newchartobject = chartobjects->querySubObject("Add(int,int,int,int)",100,30,400,250);//新建一个图表,并指定坐标
    newchartobject->setProperty("ChartTitle","fuckWorld");//指定图表的标题
    QAxObject *range=worksheet->querySubObject("Cells(int,int)",1,10);//获取数据源

    //不知道这儿该怎么设置了,想把Cells(1,10)里的数据弄成曲线.,查VBA查到一个ChartWizard函数可以用,但是这个函数的参数类型
    //不被QT支持。现在就特别悲剧,知道有函数接口可以用,但是不知道怎么用QT的方法去调用它。都快崩溃了

      workbook->dynamicCall("Close (Boolean)", false);
        excel.dynamicCall("Quit (void)");
        return a.exec();
}

另外,QT的最新免费版本已经支持ActiveX的操作,我用的是2010.2.1的。
离线liujun_seu

只看该作者 2楼 发表于: 2009-01-21
先在Excel里把统计图做好,然后程序往Excel里填写数据
QAxObject* excel = new QAxObject( "Excel.Application", this ); //获取一个Excel对象
QAxObject *workbooks = excel->querySubObject( "Workbooks" ); //得到Workbooks集合的指针
QAxObject *workbook = workbooks->querySubObject( "Open(const QString&)", "C:\\data\\A.xls" ); //打开硬盘上的一个Excel文档
QAxObject *sheets = workbook->querySubObject( "Sheets" ); //得到Sheets对象的指针
QAxObject *StatSheet = sheets->querySubObject( "Item(const QVariant&)", QVariant("stat") ); //得到名为stat的一个sheet的指针
StatSheet->dynamicCall( "Select()" ); //选择名为stat的sheet,使之可见
QAxObject *range = StatSheet->querySubObject( "Range(const QVariant&)", QVariant( Qstring("A1:A1"))); //选择A1:A1这个range对象
range->dynamicCall( "Clear()" ); // 清除range对象
range->dynamicCall( "SetValue(const QVariant&)", QVariant(5) ); //将该range对象的值设为5
离线wd007

只看该作者 1楼 发表于: 2009-01-20
商业版的可以吧,开源的好像不行
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
快速回复
限100 字节
 
上一个 下一个