【问题标题】:(Qt) QAxObject: Add Excel worksheet(Qt) QAxObject:添加 Excel 工作表
【发布时间】:2014-03-24 12:20:44
【问题描述】:

我有一个使用 Excel 的 Qt 应用程序,我想将工作表添加到文档中。最简单的解决方案就是调用

QAxObject *sheets = workbook->querySubObject("Worksheets");
sheets->dynamicCall("Add()");

但这样您将在最后一张现有工作表之前添加一张工作表,但我想将其放置在最后一张工作表之后。生成的文档会告诉你:

IDispatch* Add (QVariant Before, QVariant After, QVariant Count, QVariant Type) [slot]

Connect a signal to this slot:

    QObject::connect(sender, SIGNAL(someSignal(QVariant, QVariant, QVariant, QVariant)), object, SLOT(Add(QVariant, QVariant, QVariant, QVariant)));
Or call the function directly:

    QVariantList params = ...
    QAxObject * result = object->querySubObject("Add(QVariant, QVariant, QVariant, QVariant)", params);

但是 params 应该是怎样的呢?正如我所看到的,“之后”是第二个参数,但是我根本不需要“之前”。我应该指定什么作为参数?

【问题讨论】:

    标签: excel qt qaxobject


    【解决方案1】:

    你必须指定最后一个和新的工作表,否则如果 BEFORE 和 AFTER 都被省略,新工作表将默认插入到活动工作表之前。

    您可以执行以下操作以在最后一张纸之后插入:

    // set of sheets
    QAxObject* sheets = workbook->querySubObject( "Worksheets" );
    
    // Sheets number
    int intCount = sheets->property("Count").toInt();
    
    // Capture last sheet and add new sheet
    QAxObject* lastSheet = sheets->querySubObject("Item(int)", intCount);
    sheets->dynamicCall("Add(QVariant)", lastSheet->asVariant());
    
    // Capture the new sheet and move to after last sheet
    QAxObject* newSheet = sheets->querySubObject("Item(int)", intCount);
    lastSheet->dynamicCall("Move(QVariant)", newSheet->asVariant());
    
    Regards,
    
      Valdir.
    

    【讨论】:

    • 这对我有用——它应该被接受为正确答案
    【解决方案2】:

    我遇到了同样的问题并以同样的方式解决了它。 无法使以下语法起作用:

    sheets->dynamicCall("Add(After:=QVariant)", lastSheet->asVariant());
    

    都不是:

    sheets->dynamicCall("Add(Null, QVariant)", lastSheet->asVariant());
    

    也不是:

    sheets->dynamicCall("Add(QVariant, QVariant)", QVariant(), lastSheet->asVariant());
    

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 2021-09-08
      • 2017-07-20
      • 1970-01-01
      相关资源
      最近更新 更多