在利用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);
}
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
//创建Excel 2000服务器(启动Excel)
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
exit(1);
}
if(CoInitialize(NULL) != NULL)
{
AfxMessageBox("初始化COM失败!");
}
office是2003的
//.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();
这两个函数调用我放在了对话框中去了。如果单独使用需要把屏蔽去掉。
你所发的代码只适用2000以及以下版本,至于为什么你可以去查csdn。我不多说
7楼发的代码我看了,代码看上去是对的,但对于2000来说不适用.7楼发的是2003以及03以上版本才能用的代码. 如果不是这个问题,建议重装Excel。或者升级到excel2003,用7楼的代码应该可以,虽然我没验证.呵呵
PS:你以前的Excel是2000版本的吧.