2012-10-01 72 views
0

我有一个使用ActiveX文档(自动化)方法打开Excel表格嵌入对象的MFC/C++项目。不幸的是,Excel.Sheet obj API没有方法从预打包的htm/cvs文件加载数据。所以,我无法加载准备好的数据。能够从文件加载数据的唯一对象是“Workbooks”(方法Open(...)),但它总是创建一个新的Sheet对象,并且不使用现有的对象。所有使用嵌入式Excel.Sheet文档的示例都是“手动”填充表格单元格,没有人展示如何打开其中的现有文件。如何将数据文件加载到自动Excel Sheet文档?

那么,如何将html/cvs数据文件加载到自动化Excel Sheet文档?

回答

0

事实证明,没有办法创建ActiveX文件格式的Excel表单文件与xls/xlsx不一致。首先,您需要在xls/xlsx中转换html格式,然后通过标准OLE API(OleCreateFromFile)打开。 我描述的转换in the link

1

您可以使用OleObjects将任何文件(任何类型)嵌入到Excel工作表中。这是安装文件示例代码:

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

} 

完整的源代码(C++),你可以找到in this article

相关问题