我有一个MFC/C++项目,它使用ActiveX文档(自动化)方法打开Excel Sheet嵌入对象。不幸的是,Excel.Sheet obj API没有从预先准备好的htm/cvs文件加载数据的方法。因此,我无法加载准备好的数据。唯一能够从文件加载数据的对象是"Workbooks“(方法Open(...)),但它总是创建一个新的Sheet对象,而不使用现有的对象。所有使用嵌入式Excel.Sheet文档的示例都提供了“手动”填充表格单元格的功能,但没有人演示如何打开其中的现有文件。
那么,如何将html/cvs数据文件加载到自动化Excel表格文档中呢?
发布于 2012-10-09 17:24:50
原来,有没有办法创建xlsx工作表文件的初始化格式不符合ActiveX /xlsx。首先,您需要将html格式转换为xls/xlsx,然后通过standart OLE API (OleCreateFromFile)打开。我在in the link中描述了一个转换。
发布于 2013-04-14 21:05:34
您可以使用OleObjects将任何文件(任何类型)嵌入到Excel worksheet中。以下是附加文件的示例代码:
BOOL InsertFileToWorksheet(Exl_Worksheet &ws, LPCTSTR lpFilePath, LPCTSTR ObjName)
{
RemoveOldOleObj(ws,ObjName);
VARIANT vFileName;
str_to_vt(vFileName,(char*)lpFilePath);
ExlOLEObjects ole_objects;
BOOL bRes(TRUE);
try{
ole_objects = ws.OLEObjects( vOptional );
COleVariant left(10l),top(10l),width(1l),height(1l);
Exl_OLEObject objSrc = ole_objects.Add(vOptional,vFileName,vOptional,vOptional,vOptional,vOptional,vOptional,
vOptional,vOptional,vOptional,vOptional);
objSrc.SetName(ObjName);
}catch(...){
bRes = FALSE;
}
VariantClear(&vFileName);
return bRes;
}
void RemoveOldOleObj(Exl_Worksheet &ws, LPCTSTR ObjName )
{
ExlOLEObjects ole_objects;
try{
ole_objects = ws.OLEObjects( vOptional );
}catch(...){
return;
}
VARIANT vObjName;
str_to_vt(vObjName,(char*)ObjName);
Exl_OLEObject obj;
try{
obj = ole_objects.Item(vObjName);
obj.Delete();
}catch(...){
}
VariantClear(&vObjName);
}
你可以在in this article上找到完整的源代码(c++)。
https://stackoverflow.com/questions/12675150
复制相似问题