在利用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);
}
解决方案 »
- 关于Unicode编码转换的问题
- 问个CSocket的OnReceive的问题
- 资源无法使用的问题。
- vc做网络编程,请救大虾一个问题~~~~
- 很奇特的问题,求教?
- 谁知道局域网聊天软件 鸿业网话 是用的哪个端口?tcp还是Udp
- 请问:在调用settimer成功后,是不是就启动的该定时器(若否,启动定时器的函数?)?SetTimer(NULL,0,5000,(void *)print)(print是我定
- 请教98下的资源分配问题
- 模式对话框的问题,你一定会晓得。
- 见鬼了: 我的 memfile 必须加入 AfxMessageBox(""); 才能播放 Sleep(1000);都不行 大家快来看看啊
- 高分求助达人来反编译DLL文件
- 不用access软件,用MFC可以生成一个access表吗?
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版本的吧.