0

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

那么,如何将 html/cvs 数据文件加载到自动 Excel 工作表文档中?

4

2 回答 2

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++) 。

于 2013-04-14T13:05:34.093 回答
0

事实证明,没有办法创建由文件格式初始化的 ActiveX Excel Sheet Document 与 xls/xlsx 不一致。首先需要将html格式转换成xls/xlsx,然后通过标准的OLE API(OleCreateFromFile)打开。我在链接中描述的转换。

于 2012-10-09T09:24:49.937 回答