VC++ 操作EXCEL方法
2015-03-21 15:31
393 查看
from:http://blog.csdn.net/harvic880925/article/details/7674441
一、Excel的对象模型
在对Excel编程之前首先要了解微软Excel对象(Object)模型。(Parent-Child关系)
其中: 图 1 Office应用程序对象模型(Excel)From msdn
Application 对象:Application 对象表示 Excel 应用程序本身。Application 对象提供了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户的对象的信息。
Workbook 对象:Workbook 类表示 Excel 应用程序内的单个工作簿。Application 类的许多成员同时也是 Workbook 类的成员。在这种情况下,属性应用于特定的工作簿(而非应用于活动工作簿)。
Worksheet 对象:虽然 Worksheet 类提供了大量成员,但大部分属性、方法和事件都与Application 和/或 Workbook 类提供的成员相同或相似。Excel 提供 Sheets 集合作为Workbook 对象的属性,但 Excel 中没有Sheet 类。实际上,Sheets 集合的每个成员不是Worksheet 对象就是 Chart 对象。
Range 对象:Range 对象是 Excel 应用程序中最常用的对象。在能够处理 Excel 内的任何范围之前,必须将它表示为 Range 对象,并处理该对象的方法和属性。Range 对象表示一个单元格、一行、一列、包含一个或多个单元格块(可以连续,也可以不连续)的单元格选定范围,甚至多个工作表中的一组单元格。
特殊函数说明:
COleVariant类: 实现对VARIANT数据类型的封装,主要用于实现其它数据类型与VARIANT类型的转换
增加类
1、在一个已有的MFC工程按Ctrl + W 弹出ClassWizard对话框。
2、AddClass...\From a type Library... 在 Office 目录中,找到你想使用的Excel类型库(Offce2000下,此目录在C:\Program Files\MicrosoftOffice\Office\EXCEL9.OLB)。选择EXCEL9.OLB此类型文件。(在2003版本中选择excel.exe)
3、在弹出的对话框中选择要添加的类,具体选那些类要根据实际情况而定。当然你也可以全选。
_Application Workbooks _Workbook Worksheets _Worksheet Range (常用的类)
初始化Com
[cpp] view
plaincopy
在BOOL C***App::InitInstance()中的BOOL CMyApp::InitInstance()后加入以下代码:
if (CoInitialize(NULL) != 0)
{
AfxMessageBox("初始化COM支持库失败!");
exit(1);
}
释放COM
增加ExitInstance()虚函数
[cpp] view
plaincopy
int CMy5_7App::ExitInstance()
{
/////////////////////////////////////////////////
CoUninitialize();
////////////////////////////////////////////////////释放COM支持库
returnCWinApp::ExitInstance();
}
定义变量:
[cpp] view
plaincopy
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
LPDISPATCH lpDisp; //接口指针
COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
打开已有的Excel文件
[cpp] view
plaincopy
books.AttachDispatch(app.GetWorkbooks()); //得到books
// 或者也可以
// books = app.GetWorkbooks();
lpDisp = books.Open("D:////1.xls", covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional);
得到book
[cpp] view
plaincopy
book.AttachDispatch( lpDisp ); (方法一)//这是获取原有的book
book =books.Add(covOptional); //得到Workbook (方法二) //这是新建一个book
objBook = objBooks.Open( "D:\\Excel\\demo.xls", (方法三)
VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional); <span style="color:#333333;BACKGROUND: white">
</span>
得到sheets
[cpp] view
plaincopy
sheets = book.GetWorksheets(); //得到Worksheets
得到sheet
[cpp] view
plaincopy
sheet = sheets.GetItem(COleVariant((short)1)); //得到Worksheet
上面虽然写了一般的方法,我但一般不用AttachDispatch()的方法,因为这种方法常常要调用Release Dispatch()来释放,常常会因为忘记释放出现各种错误,所以我一般采用下面的方法
[cpp] view
plaincopy
CApplication app;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
LPDISPATCH lpDisp;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!app.CreateDispatch(L"Excel.Application"))
{
AfxMessageBox(L"无法创建Excel应用!");
return false;
}
books=app.get_Workbooks();
book = books.Open(L"D:////1.xls",covOptional, covOptional, covOptional,covOptional,covOptional, covOptional, covOptional, covOptional,covOptional,covOptional,covOptional, covOptional, covOptional,covOptional);
sheets=book.get_Sheets();
sheet=sheets.get_Item(COleVariant((short)0));
Crange temp_range=sheet.get_Range(COleVariant(L”A1”),covOptional);
COleVarianttemp_Value=COleVariant(temp_range.get_Value(covOptional));
记得在退出时
[cpp] view
plaincopy
books.Close();
app.Quit();
心得:
1、在获取range范围内的值时,要根据不同的单元格格式,调用不同的转换函数,转换函数有ColeCurrency,ColeDateTime,ColeVariant,当单元格是时间或日期属性时,要用ColeDateTime转换
如:
[cpp] view
plaincopy
Rangerange=sheet.GetRange(COleVariant("D8"),covOptional);
COleVariantrValue;
rValue=COleDateTime(range.GetValue(covOptional)); // 单元格中的数据为:0:01:15
一、Excel的对象模型
在对Excel编程之前首先要了解微软Excel对象(Object)模型。(Parent-Child关系)
其中: 图 1 Office应用程序对象模型(Excel)From msdn
Application 对象:Application 对象表示 Excel 应用程序本身。Application 对象提供了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户的对象的信息。
Workbook 对象:Workbook 类表示 Excel 应用程序内的单个工作簿。Application 类的许多成员同时也是 Workbook 类的成员。在这种情况下,属性应用于特定的工作簿(而非应用于活动工作簿)。
Worksheet 对象:虽然 Worksheet 类提供了大量成员,但大部分属性、方法和事件都与Application 和/或 Workbook 类提供的成员相同或相似。Excel 提供 Sheets 集合作为Workbook 对象的属性,但 Excel 中没有Sheet 类。实际上,Sheets 集合的每个成员不是Worksheet 对象就是 Chart 对象。
Range 对象:Range 对象是 Excel 应用程序中最常用的对象。在能够处理 Excel 内的任何范围之前,必须将它表示为 Range 对象,并处理该对象的方法和属性。Range 对象表示一个单元格、一行、一列、包含一个或多个单元格块(可以连续,也可以不连续)的单元格选定范围,甚至多个工作表中的一组单元格。
特殊函数说明:
COleVariant类: 实现对VARIANT数据类型的封装,主要用于实现其它数据类型与VARIANT类型的转换
增加类
1、在一个已有的MFC工程按Ctrl + W 弹出ClassWizard对话框。
2、AddClass...\From a type Library... 在 Office 目录中,找到你想使用的Excel类型库(Offce2000下,此目录在C:\Program Files\MicrosoftOffice\Office\EXCEL9.OLB)。选择EXCEL9.OLB此类型文件。(在2003版本中选择excel.exe)
3、在弹出的对话框中选择要添加的类,具体选那些类要根据实际情况而定。当然你也可以全选。
_Application Workbooks _Workbook Worksheets _Worksheet Range (常用的类)
初始化Com
[cpp] view
plaincopy
在BOOL C***App::InitInstance()中的BOOL CMyApp::InitInstance()后加入以下代码:
if (CoInitialize(NULL) != 0)
{
AfxMessageBox("初始化COM支持库失败!");
exit(1);
}
释放COM
增加ExitInstance()虚函数
[cpp] view
plaincopy
int CMy5_7App::ExitInstance()
{
/////////////////////////////////////////////////
CoUninitialize();
////////////////////////////////////////////////////释放COM支持库
returnCWinApp::ExitInstance();
}
定义变量:
[cpp] view
plaincopy
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
LPDISPATCH lpDisp; //接口指针
COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
打开已有的Excel文件
[cpp] view
plaincopy
books.AttachDispatch(app.GetWorkbooks()); //得到books
// 或者也可以
// books = app.GetWorkbooks();
lpDisp = books.Open("D:////1.xls", covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional);
得到book
[cpp] view
plaincopy
book.AttachDispatch( lpDisp ); (方法一)//这是获取原有的book
book =books.Add(covOptional); //得到Workbook (方法二) //这是新建一个book
objBook = objBooks.Open( "D:\\Excel\\demo.xls", (方法三)
VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional, VOptional, VOptional,
VOptional, VOptional); <span style="color:#333333;BACKGROUND: white">
</span>
得到sheets
[cpp] view
plaincopy
sheets = book.GetWorksheets(); //得到Worksheets
得到sheet
[cpp] view
plaincopy
sheet = sheets.GetItem(COleVariant((short)1)); //得到Worksheet
上面虽然写了一般的方法,我但一般不用AttachDispatch()的方法,因为这种方法常常要调用Release Dispatch()来释放,常常会因为忘记释放出现各种错误,所以我一般采用下面的方法
[cpp] view
plaincopy
CApplication app;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
LPDISPATCH lpDisp;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!app.CreateDispatch(L"Excel.Application"))
{
AfxMessageBox(L"无法创建Excel应用!");
return false;
}
books=app.get_Workbooks();
book = books.Open(L"D:////1.xls",covOptional, covOptional, covOptional,covOptional,covOptional, covOptional, covOptional, covOptional,covOptional,covOptional,covOptional, covOptional, covOptional,covOptional);
sheets=book.get_Sheets();
sheet=sheets.get_Item(COleVariant((short)0));
Crange temp_range=sheet.get_Range(COleVariant(L”A1”),covOptional);
COleVarianttemp_Value=COleVariant(temp_range.get_Value(covOptional));
记得在退出时
[cpp] view
plaincopy
books.Close();
app.Quit();
心得:
1、在获取range范围内的值时,要根据不同的单元格格式,调用不同的转换函数,转换函数有ColeCurrency,ColeDateTime,ColeVariant,当单元格是时间或日期属性时,要用ColeDateTime转换
如:
[cpp] view
plaincopy
Rangerange=sheet.GetRange(COleVariant("D8"),covOptional);
COleVariantrValue;
rValue=COleDateTime(range.GetValue(covOptional)); // 单元格中的数据为:0:01:15
相关文章推荐
- 《VC++ 操作EXCEL方法总结二》
- VC 操作 EXCEL---插入工作表(Insert.Sheet)方法
- VC中操作Excel方法集锦(1)
- VC++操作 Excel 的方法总结
- VC操作Excel的方法
- VC++ 中操作Excel文档的方法,读取,查询,写入,修改,删除
- VC++ 中操作Excel文档的方法,读取,查询,写入,修改,删除
- VC通过Excel接口 操作Excel的方法
- VC2010操作Excel的方法
- VC++ 操作EXCEL方法总结二
- POI操作Excel常用方法总结
- C#操作excel(多种方法比较)
- C#操作Excel的方法
- 在VC中使用智能指针操作Excel(转载)
- Java操作Excel的一种方法
- VC控制EXCEL的基本操作之设置篇
- VC++ 中简单操作MP3音乐的方法,小结
- VC操作Excel之基本操作(颜色等)
- VC++操作Excel
- 【转】asp.net 在IIS下操作Excel文件权限不足的解决方法