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);

希望高手帮忙啦 谢谢

该回答引用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();

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