在利用VC编程出了点小问题:利用excel作为打印功能,之前可以成功使用,但上次重装了系统,及excel出现“创建Excel服务失败”问题; _Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
//创建Excel 2000服务器(启动Excel)
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
exit(1);
}
 

解决方案 »

  1.   

    是不是你的OFFICE安装的有问题啊 
      

  2.   

    //初始化COM库
    if(CoInitialize(NULL) != NULL)
    {
    AfxMessageBox("初始化COM失败!");
    }
      

  3.   

    试了下CoInitialize(NULL),没有用还有什么方法
     office是2003的
      

  4.   

    智能指针的参考资料太散碎了。这东西花点时间多试试也就调通了。这个代码是网上拷贝的,我修改过了,也调通了。本来想在研究研究的,最近在赶一个活的,就没细弄了。不过CreateDispatch这个是老接口了;新的office用的都是CreateInstance了。用老方法会直接出错的。
    //.h
    #pragma once#define OFFICEXP 1 
    #define OFFICE2000 2 
    //如果使用OFFICE2000的内核,手动将此处改为#define OFFICE_VER OFFICE2000 
    #define OFFICE_VER OFFICEXP 
    #define USE_PROGID 1 
    #define USE_LIBID 0 
      
    #define _M2STR(x) #x
    #define M2STR(x) _M2STR(x)#ifndef MSDLL_PATH
    #if OFFICE_VER == OFFICEXP 
    #define _MSDLL_PATH "C:\Program Files\Common Files\Microsoft Shared\Office11\MSO.DLL" 
    #elif OFFICE_VER == OFFICE2000 
    #define _MSDLL_PATH "C:\Program Files\Microsoft Office\Office\MSO9.dll" 
    #endif 
    #else 
    #define _MSDLL_PATH M2STR(MSDLL_PATH) 
    #endif 
      
    #import  _MSDLL_PATH rename ( "RGB" , "MSRGB" ) 
      
    #ifdef  VBE6EXT_PATH 
    #import M2STR(VBE6EXT_PATH) 
    #else
    #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" 
    #endif 
      
    #if USE_PROGID 
    #import "progid:Excel.Sheet" auto_search auto_rename rename_search_namespace("Office10")
    #elif USE_LIBID 
    #import "libid:{00020813-0000-0000-C000-000000000046}" auto_search auto_rename version(1.3) lcid(0) no_search_namespace 
    #else 
    #ifndef MSEXCEL_PATH 
    #if OFFICE_VER == OFFICEXP 
    #define _MSEXCEL_PATH "C:\Program Files\Microsoft Office\Office11\excel.exe" 
    #elif OFFICE_VER == OFFICE2000 
    #define _MSEXCEL_PATH "C:\Program Files\Microsoft Office\Office\excel.exe" 
    #endif 
    #else 
    #define _MSEXCEL_PATH  M2STR(MSEXCEL_PATH) 
    #endif 
    #import _MSEXCEL_PATH auto_search auto_rename dual_interfaces 
    #endif using namespace Excel;
    BOOL CloneSheet(LPCTSTR xlsName);//copy a sheet1 to sheet2 in .xls//.cpp
    #include "stdafx.h"
    #include "ExcelOP.h"BOOL CloneSheet(LPCTSTR xlsName)
    {
    //CoInitialize(NULL);//Initiate com interface COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR); _ApplicationPtr pApp;
    pApp.CreateInstance(L"Excel.Application");
    pApp->PutVisible(0,VARIANT_TRUE); WorkbooksPtr pBooks = pApp->GetWorkbooks();
    _WorkbookPtr pBook = pBooks->Add((long)xlWorkbook); SheetsPtr pSheets = pBook->GetWorksheets();
    _WorksheetPtr pSheet = pBook->GetActiveSheet(); pSheet->Activate(); RangePtr range = pSheet->GetRange("A3",vtMissing);
    range->PutValue2("EXP A3");
    range = pSheet->GetRange("B10",vtMissing);
    range->PutValue2("测试");
    InteriorPtr interior = range->GetInterior();
    interior->PutColor(RGB(255,0,0)); 
    Excel::FontPtr font = range->GetFont();
    font->PutName( L"黑体" );
    font->PutFontStyle(L"Bold Italic");
    font->PutSize(15); //pBook->PutSaved(0,VARIANT_TRUE);
    pBook->SaveAs(COleVariant(xlsName),
    COleVariant(short(xlXMLSpreadsheet)),
    vtMissing,
    vtMissing,
    vFalse,
    vFalse,
    xlNoChange,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing); pApp->Quit(); //CoUninitialize();//Release com interface return TRUE;
    }CoInitialize(NULL);
    CoUninitialize();
    这两个函数调用我放在了对话框中去了。如果单独使用需要把屏蔽去掉。
      

  5.   

    如果不是代码的问题,检查一下是不是相关的进程服务给关掉,而造成的。关键服务:window installer等,用360安全卫士启动服务,建议开启的都开启,看看行不行。不行,就重新装一下office。
      

  6.   

    我也遇到这样的情况,但我是我重新装OFFICE 也不行
      

  7.   

    首先确认下你的Excel版本,2000和2003以及后续版本在VC中的对象是不一样的,例如2000中的获取工作薄为Workbooks,而在2003以及后续版本中为WorkbooksPtr. 
    你所发的代码只适用2000以及以下版本,至于为什么你可以去查csdn。我不多说
    7楼发的代码我看了,代码看上去是对的,但对于2000来说不适用.7楼发的是2003以及03以上版本才能用的代码. 如果不是这个问题,建议重装Excel。或者升级到excel2003,用7楼的代码应该可以,虽然我没验证.呵呵
    PS:你以前的Excel是2000版本的吧.