我现在要用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();
请注意,这只是一个示例代码,并不能保证在所有环境中都能正常工作。你可能需要根据你的实际情况进行适当的修改和调整。