转载请注明出处:VC++6.0操作excel2007文件封装类CExcelServer
参考文章:
1、VC操作Excel文件编程相关内容总结
2、VC++导出数据到Excel
3、VSTO学习笔记(二)Excel对象模型
利用VC操作Excel的方法至少有两种:
1、利用ODBC把Excel文件当成数据库文件,来进行读、写、修改等操作。网上有人编写了CSpreadSheet类,提供支持。
2、利用OLE Automation方法,将Excel当成组件服务器,利用VBA。
本文选择了第2中方式。要利用OLE Automation实现对Excel进行操作,必须与Excel对象模型提供的对象进行交互。Excel提供了数百个可能需要与之交互的对象,下面先了解一下编程中常用到的几个对象。
1) Application 对象:代表整个 Microsoft Excel 应用程序。
2) Workbook 对象:代表一个 Microsoft Excel 工作簿,即Excel文件。
3) Workbooks 对象:包含 Microsoft Excel 中当前打开的所有 Workbook 对象。
4) Worksheet 对象:代表一个工作表。一个工作簿中可以包括多个工作表。
5) Worksheets 对象:代表指定或活动工作簿中所有 Worksheet 对象的集合。
6) Range 对象:代表某一单元格、某一行、某一列、某一选定区域(该区域可包含一个或若干连续单元格区域)。Range对象是Excel操作的重点,对于数据插入、修改、删除都要通过它来实现,Range所表示等同于我们在实际编辑Excel文件时,用鼠标在表单中选择中的区域,选中之后再对其进行单元格修改、删除、合并、设置宽、高、颜色等操作。
7) Chart对象:代表工作簿中的图表。此图表既可以是嵌入的图表(包含在ChartObject对象中),也可以是单独的图表工作表。
8) Charts对象:代表指定或活动工作簿中所有图表工作表的集合。
9) Sheets 对象:代表指定或活动工作簿中所有工作表(可以是Chart对象或者WorkSheet对象)的集合。
10) Font对象:用于设置Range选中的单元格字体格式和颜色。
11) Interior对象:用于设置Range选中的单元格背景格式和颜色。
12) Borders对象:用于设置Range选中的单元格的边框。
其他对象可到msdn去了解:http://msdn.microsoft.com/zh-cn/library/office/ff194068.aspx
调用excel对象方法时,常常会用到一些枚举变量,可以到msdn中查找相关值:http://msdn.microsoft.com/zh-cn/library/office/ff838815.aspx
在操作Excel之前,必须向工程中添加Excel对象,其步骤是: 选择Menu --> View --> ClassWizard,打开ClassWizard 窗口, 选择Add Class -->From a type library,若系统中安装的是Office2000,则在Office 安装目录选择Excel.OLB,如果安装的是Office2003或2007,则选择Excel.exe;然后根据需要选择添加的类(如果要使用下面的CExcelServer封装类,必须加入_Application,Workbooks,_Workbook ,Worksheets,_Work2sheet,Range,Font,Interior,Borders等),向导会在工程中自动生成加入了这些类的Excel.h和Excel.cpp两个文件。在要使用这些导入的类时加入#include "Excel.h"即可。
CExcelServer类头文件
点击(此处)折叠或打开
- #if !defined(AFX_EXCELSERVER_H__7495C273_745B_4F87_A729_D057CAA8D2A9__INCLUDED_)
- #define AFX_EXCELSERVER_H__7495C273_745B_4F87_A729_D057CAA8D2A9__INCLUDED_
-
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- // ExcelServer.h : header file
- //
-
- #include <afxcoll.h>
- #include "excel.h"
-
- #define InfoMessageBox(strMsg) \
- AfxMessageBox(strMsg, MB_OK | MB_ICONINFORMATION)
- #define DebugMessageBox(strMsg) \
- AfxMessageBox(strMsg, MB_OK | MB_ICONINFORMATION)
- #define WarningMessageBox(strMsg) \
- AfxMessageBox(strMsg, MB_OK | MB_ICONWARNING)
- #define ErrorMessageBox(strMsg) \
- AfxMessageBox(strMsg, MB_OK | MB_ICONERROR)
-
- //Excel文件格式
- //http://msdn.microsoft.com/zh-cn/library/office/ff198017.aspx
- typedef enum
- {
- xlCSV = 6, //csv
- xlTextWindows = 20, //Windows 文本
- xlTextMSDOS = 21, //MSDOS 文本
- xlUnicodeText = 42, //Unicode 文本
- xlExcel9795 = 43, //Excel9795
- xlWorkbookNormal = -4143, //常规工作簿
- xlExcel12 = 50, //Excel 12
- xlWorkbookDefault = 51, //默认工作簿
- } XlFileFormat;
-
- //水平对齐方式
- //http://msdn.microsoft.com/zh-cn/library/office/ff840772.aspx
- typedef enum
- {
- xlHAlignCenter = -4108, //居中对齐
- xlHAlignCenterAcrossSelection = 7, //跨列居中
- xlHAlignDistributed = -4117, //分散对齐
- xlHAlignFill = 5, //填充
- xlHAlignGeneral = 1, //按数据类型对齐
- xlHAlignJustify = -4130, //两端对齐
- xlHAlignLeft = -4131, //左对齐
- xlHAlignRight = -4152, //右对齐
- } XlHAlign;
-
- //垂直对齐方式
- //http://msdn.microsoft.com/zh-cn/library/office/ff835305.aspx
- typedef enum
- {
- xlVAlignBottom = -4107, //靠下
- xlVAlignCenter = -4108, //居中对齐
- xlVAlignDistributed = -4117, //分散对齐
- xlVAlignJustify = -4130, //两端对齐
- xlVAlignTop = -4160, //靠上
- } XlVAlign;
-
- //插入时单元格的移动方向
- //http://msdn.microsoft.com/zh-cn/library/office/ff837618.aspx
- typedef enum
- {
- xlShiftDown = -4121, //向下移动单元格
- xlShiftToRight = -4161, //向右移动单元格
- } XlInsertShiftDirection;
-
- //边框的线条样式
- //http://msdn.microsoft.com/zh-cn/library/office/ff821622.aspx
- typedef enum
- {
- xlContinuous = 1, //实线
- xlDash = -4115, //虚线
- xlDashDot = 4, //点划相间线
- xlDashDotDot = 5, //划线后跟两个点
- xlDot = -4118, //点式线
- xlDouble = -4119, //双线
- xlLineStyleNone = -4142, //无线条
- xlSlantDashDot = 13, //倾斜的划线
- } XlLineStyle;
-
- //边框的粗细
- //http://msdn.microsoft.com/zh-cn/library/office/ff197515.aspx
- typedef enum
- {
-
- xlHairline = 1, //细线(最细的边框)
- xlMedium = -4138, //中等
- xlThick = 4, //粗(最宽的边框)
- xlThin = 2, //细
- } XlBorderWeight;
-
- /////////////////////////////////////////////////////////////////////////////
- // CExcelServer window create by lingdxuyan
-
- class CExcelServer : public CWnd
- {
- // Construction
- public:
- CExcelServer();
-
- // Attributes
- private:
- CString m_strExcelFile;
- CString m_strWorkSheet;
-
- _Application m_oExcelApp; // Excel程序
- _Worksheet m_oWorkSheet;