2012-10-05 74 views
0

我想用C++ OLE自動化將帶圖片的HTML文件導出到Excel。將具有圖像的HTML文件導出到Excel單個XLS文件?

樣品的代碼:

#import "\\alpha\sdk\mso\office12\mso.dll" rename("RGB", "MSORGB") rename("DocumentProperties", "MSODocumentProperties") rename("SearchPath", "MSOSearchPath") 
using namespace Office; 
#import "\\alpha\sdk\mso\office12\VBE6EXT.OLB" rename("RGB", "MSORGB") rename("EOF", "EndOfFile") 
using namespace VBIDE; 
#import "\\alpha\sdk\mso\office12\excel.exe" rename("DialogBox", "ExcelDialogBox") rename("RGB", "ExcelRGB") rename("CopyFile", "ExcelCopyFile") rename("ReplaceText", "ExcelReplaceText") no_auto_exclude 
#import "\\alpha\sdk\mso\office12\msword.olb" rename("DialogBox", "WordDialogBox") rename("RGB", "WordRGB") rename("CopyFile", "WordCopyFile") rename("ReplaceText", "WordReplaceText") rename("ExitWindows", "WordExitWindows") rename("FindText", "WordFindText") no_auto_exclude 

// Create Excle application OLE obj... 
Excel::_ApplicationPtr pApplication; 
HRESULT hRes = pApplication.CreateInstance(_T("Excel.Application")); 
if (hRes==S_OK) { 
    pApplication->PutDisplayAlerts(MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL), SORT_DEFAULT), VARIANT_FALSE); 
    pApplication->PutCopyObjectsWithCells(MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL), SORT_DEFAULT), VARIANT_TRUE); 

    // Open prepeared for export HTML file 
    Excel::_WorkbookPtr pBook = pApplication->Workbooks->Open(_bstr_t(szHTMLPath), _variant_t((long)Excel::xlUpdateLinksAlways), vtMissing, vtMissing/*_variant_t((long)Excel::xlHtml)*/); 
    if (pBook!=NULL) { 
     //Save opened HTML file as XSL file 
     hRes = pBook->SaveAs(_bstr_t(szXLSPath), _variant_t((long)Excel::xlWorkbookNormal), vtMissing, vtMissing, vtMissing, vtMissing, Excel::xlNoChange, _variant_t((long)Excel::xlLocalSessionChanges), _variant_t(false)); 
     if (hRes==S_OK) { 
      // All is ok 
     } 
     pBook->Close(); 
    } 
    pApplication->Quit(); 
} 

不幸的是,從HTML代碼中的IMG圖片不被轉換成嵌入圖像的,但在外部鏈接的圖像。如何將圖像轉換爲內部存儲在XLS文件中作爲嵌入對象?

回答

0

簡要談話on a Microsoft forum允許形成或多或少的工作代碼。

Excel::ShapesPtr pShapes = Excel::_WorksheetPtr(pBook->Worksheets->Item[1])->Shapes; 
for (long nIndex=1; nIndex<=pShapes->GetCount(); nIndex++) 
{ 
    Excel::ShapePtr pShape = pShapes->Item(nIndex); 

    const Office::MsoShapeType nType = pShape->Type; 
    switch (nType) 
    { 
    case Office::msoLinkedPicture:  
     { 
      const float rLeft  = pShape->Left; 
      const float rTop  = pShape->Top; 
      const float rWidth  = pShape->Width; 
      const float rHeight  = pShape->Height; 
      const _bstr_t szPath = pShape->AlternativeText; 

      Excel::ShapePtr pNewShape = pShapes->AddPicture(szPath, Office::msoFalse, Office::msoTrue, rLeft, rTop, rWidth, rHeight); 
      if (pNewShape) 
      { 
       pShape->Delete(); 
       nIndex = 0; 
      } 
     } 
     break; 
    } 
}