2012-10-01 106 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

相關問題