s8hrs8hr 2015-10-08 04:24 采纳率: 0%
浏览 1483

C++将.swf的flash文件嵌入excel

我现在要用C++将.swf的flash文件嵌入excel,用的是OLE的方法,就是用的那个excel.h和excel.cpp的头文件,由于没有具体说明,我就从头文件里找了个LPDISPATCH OLEObjects::Add方法,感觉应该是这个,编译通过了但是没有得到想要的效果代码在这里

    lpDisp=books.Open(ml,covOptional, covOptional, covOptional, covOptional, covOptional,
   covOptional, covOptional, covOptional, covOptional, covOptional,
   covOptional, covOptional, covOptional, covOptional ); 
    book.AttachDispatch(lpDisp);
    sheets=book.GetSheets();
    sheet=sheets.GetItem(COleVariant((short)1));


    lpDisp = sheet.OLEObjects(COleVariant((short)1));
    oleobj.AttachDispatch(lpDisp);

    oleobj.SetEnabled(TRUE);
    oleobj.SetVisible(TRUE);

    oleobj.Add(covOptional,COleVariant("E:\SWFLIB_TestProject\SWF Sample Movies\Sample2.swf"), covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);

希望高手帮忙啦 谢谢

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-27 23:00
    关注

    该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

    你的代码看起来大体上是正确的,但有一些问题可能导致你没有得到期望的效果。


    首先,你在 oleobj.Add 方法的第二个参数中使用了反斜杠 \,这是一个转义字符。为了在字符串中表示一个反斜杠,你需要使用两个反斜杠 \\ 或者使用正斜杠 /。所以你的路径应该改为:

    oleobj.Add(covOptional, COleVariant("E:/SWFLIB_TestProject/SWF Sample Movies/Sample2.swf"), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);
    

    另外,确保你的 SWF 文件路径是正确的,并且你的 Excel 文件支持嵌入 Flash 动画。有些版本的 Excel 可能不支持此功能。


    最后,你还需要在代码中添加错误处理和释放对象的步骤,以确保资源的正确释放。这样可以防止内存泄漏和其他潜在问题。以下是一个完整示例:

    #include <afxdisp.h>
    
    // ...
    
    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
    _Application app;
    _Workbooks books;
    _Workbook book;
    Sheets sheets;
    _Worksheet sheet;
    OLEObjects oleObjects;
    OLEObject oleObject;
    
    if (!app.CreateDispatch("Excel.Application"))
    {
        // 处理创建 Excel Application 失败的情况
    }
    
    books.AttachDispatch(app.GetWorkbooks());
    
    LPDISPATCH lpDisp = books.Open(ml, covOptional, covOptional, covOptional, covOptional, covOptional,
        covOptional, covOptional, covOptional, covOptional, covOptional,
        covOptional, covOptional, covOptional, covOptional);
    book.AttachDispatch(lpDisp);
    
    sheets = book.GetSheets();
    sheet = sheets.GetItem(COleVariant((short)1));
    
    lpDisp = sheet.GetOLEObjects();
    oleObjects.AttachDispatch(lpDisp);
    
    oleObject = oleObjects.Add(covOptional, COleVariant("E:/SWFLIB_TestProject/SWF Sample Movies/Sample2.swf"), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);
    
    oleObject.SetEnabled(TRUE);
    oleObject.SetVisible(TRUE);
    
    // ...
    
    // 释放对象
    oleObject.ReleaseDispatch();
    oleObjects.ReleaseDispatch();
    sheet.ReleaseDispatch();
    sheets.ReleaseDispatch();
    book.Close(FALSE, covOptional, covOptional);
    book.ReleaseDispatch();
    books.ReleaseDispatch();
    app.Quit();
    app.ReleaseDispatch();
    

    请注意,这只是一个示例代码,并不能保证在所有环境中都能正常工作。你可能需要根据你的实际情况进行适当的修改和调整。

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大