在VC大本营里查到一篇文章,利用Automate创建了一个Excel并陷入了SDI里,修改后想直接保存,但一直不能成功,(已经获的了LPDISPATCH lpDisp; lpDisp = theApp.m_pSelection->GetIDispatch(); )请教保存的方法。解决马上结贴。
void COfficeView::EmbedAutomateWord() 
{
BeginWaitCursor();
COfficeCntrItem* pItem = NULL; 
    TRY 

        COfficeDoc* pDoc = GetDocument(); 
        ASSERT_VALID(pDoc); 
        pItem = new COfficeCntrItem(pDoc); 
        ASSERT_VALID(pItem);  
        CLSID clsid;  
        if(FAILED(::CLSIDFromProgID(L"Excel.sheet",&clsid)))   
            AfxThrowMemoryException(); 
/////////////
if(!pItem->CreateNewItem(clsid)) 
            AfxThrowMemoryException(); 
        ASSERT_VALID(pItem); 
        pItem->DoVerb(OLEIVERB_SHOW, this);  
        theApp.m_pSelection = pItem; 
        pDoc->UpdateAllViews(NULL);  

    CATCH(CException, e) 

        if (pItem != NULL) 

             ASSERT_VALID(pItem); 
             pItem->Delete(); 

        theApp.ShowMyMsgDlg("创建 Word 或 Excel 失败!");  

    END_CATCH 
    EndWaitCursor();  
}

解决方案 »

  1.   

    book.SaveCopyAs(COleVariant("C:\\0316.xls"));
      

  2.   


    初始化excel:CoInitialize(NULL);
    m_ExApp.CreateDispatch("Excel.Application", NULL);
    m_ExApp.SetDisplayAlerts(FALSE);
    if(!m_ExApp)
    {
        DisplayMessage(AfxGetApp()->GetMainWnd(),TEST_ERR_EXL_OPN,MB_ICONWARNING);
        return FALSE;
    }
    try
    {
    m_ExBooks = m_ExApp.GetWorkbooks();
    m_ExBook = m_ExBooks.Add(vtMissing);
    m_ExSheets = m_ExBook.GetWorksheets();
    m_ExSheet = m_ExSheets.GetItem(_variant_t((short)1));
    DeleteSheet(3);
    DeleteSheet(2);
    }
    CATCH_EXCEL;操作部分略去
    .......
    ......保存Excel文件:m_ExBook.SaveAs(_variant_t(strFileName), vtMissing, vtMissing,vtMissing, vtMissing, vtMissing, 0, vtMissing, vtMissing,vtMissing, vtMissing);strFileName 是Excel的文件名关闭Excel:
    try
    {
    m_ExSheet.m_bAutoRelease = TRUE;
    m_ExSheets.m_bAutoRelease = TRUE;
    m_ExBook.m_bAutoRelease = TRUE;
    m_ExBooks.m_bAutoRelease = TRUE;
    m_ExApp.m_bAutoRelease = TRUE; m_ExSheet.ReleaseDispatch(); 
    m_ExSheets.ReleaseDispatch(); 
    m_ExBook.ReleaseDispatch(); 
    m_ExBooks.ReleaseDispatch();
    m_ExApp.Quit();
    m_ExApp.ReleaseDispatch();
    CoUninitialize();
    }
    CATCH_EXCEL;
      

  3.   

    还是失败,请教楼上,vtMissing是如何赋值,我怀疑是我的vtMissing的值设置错误。
      

  4.   

    vtMissing不用赋值,是定义好的值,直接使用即可
      

  5.   

    还是不行,但是保存WORD就行。
      

  6.   

    http://www.yesky.com/20020408/1605898.shtml