前一篇博文中转载了有人对VS2008操作Excel的总结,网址见http://blog.sina.com.cn/s/blog_6163bdeb0102dxcy.html
之前做过使用VS2008以OLE方式操作PPT(见http://blog.sina.com.cn/s/blog_6163bdeb0100nn1p.html),所以想尝试一下OLE操作Excel,基本过程时差不多的,但有些地方还是不一样,基本过程参考上面的操作PPT的博文,不一样的地方总结于此。
参考了如下两篇博文:
VS2010+MFC解析Excel文件中数据,介绍的有关Excel的设置方面很全
http://www.vcfans.com/2010/08/vs2010-mfc-excel-file-in-the-data-analysis.html
OLE操作Excel编译错误处理,里面有具体操作的函数使用方法
http://www.cppblog.com/greatws/archive/2008/09/21/62423.html
Excel的设置方法及使用如下:
设置上与PPT最大的不同在于,添加如下代码
#pragma region Import the type libraries
//#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" \
//
//
//
// [-or-]
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\MSO.DLL" \
using namespace Office;
//#import "libid:0002E157-0000-0000-C000-000000000046"
// [-or-]
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"
using namespace VBIDE;
//#import "libid:00020813-0000-0000-C000-000000000046" \
//
//
//
//
//
// [-or-]
#import "C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE" \
#pragma endregion
(PPT添加的代码如下
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\mso.dll" \
rename_namespace("Office"), named_guids, exclude("Pages")
using namespace Office;
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb" \
rename_namespace("VBE6")
using namespace VBE6;
可见上面给的代码更规范)
设置完后(其他设置与PPT的相同),编译会发现如下错误
warning C4003: “DialogBoxW”宏的实参不足
有人说可以升级你的windows SDK,或者在错误处将DialogBox() 改为 _DialogBox() ,就可以编译成功了。
具体的实现可以参考OLE操作Excel编译错误处理那边博文,现简单整理了一个Excel的接口,完成了少量功能,代码如下
CExcelInterface.h文件
#pragma once
#pragma region Import the type libraries
//#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" \
//
//
//
// [-or-]
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\MSO.DLL" \
using namespace Office;
//#import "libid:0002E157-0000-0000-C000-000000000046"
// [-or-]
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"
using namespace VBIDE;
//#import "libid:00020813-0000-0000-C000-000000000046" \
//
//
//
//
//
// [-or-]
#import "C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE" \
#pragma endregion
#include "CApplication.h"
#include "CWorkbooks.h"
#include "CWorkbook.h"
#include "CWorksheets.h"
#include "CWorksheet.h"
#include "CRange.h"
class CExcelInterface
{
public:
public:
public:
};
CExcelInterface.cpp文件
#include "StdAfx.h"
#include "ExcelInterface.h"
CExcelInterface::CExcelInterface(void)
{
}
CExcelInterface::~CExcelInterface(void)
{
}
// open Excel engine
BOOL CExcelInterface::OpenEngine()
{
}
// create a Excel
void CExcelInterface::NewWorkBooks()
{
}
// open Excel file
void CExcelInterface::OpenExcelFile(CString cstrFileName)
{
}
void CExcelInterface::InsertData(int iSheetNum, int iRow, int iColumn, CString cstrData)
{
}
// save Excel
void CExcelInterface::SaveExcel()
{
}
// close Excel engine
void CExcelInterface::CloseEngine()
{
}
封装成个类,在使用时会很方便,如随便建一个对话框程序,建一个按钮,按钮响应如下
void CExcelTestDlg::OnBnClickedButton1()
{
}