VC操作Excel的方法Word文档格式.docx

上传人:b****3 文档编号:17547376 上传时间:2022-12-07 格式:DOCX 页数:13 大小:47.12KB
下载 相关 举报
VC操作Excel的方法Word文档格式.docx_第1页
第1页 / 共13页
VC操作Excel的方法Word文档格式.docx_第2页
第2页 / 共13页
VC操作Excel的方法Word文档格式.docx_第3页
第3页 / 共13页
VC操作Excel的方法Word文档格式.docx_第4页
第4页 / 共13页
VC操作Excel的方法Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

VC操作Excel的方法Word文档格式.docx

《VC操作Excel的方法Word文档格式.docx》由会员分享,可在线阅读,更多相关《VC操作Excel的方法Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

VC操作Excel的方法Word文档格式.docx

//允许其它用户控制Excel,否则Excel将一闪即逝.

//Openanexcelfile

charpath[MAX_PATH];

GetCurrentDirectory(MAX_PATH,path);

CStringstrPath=path;

strPath+="

\\VCOpExcel"

;

wbks.AttachDispatch(exlapp.GetWorkbooks());

lpDisp=wbks.Open(strPath,

avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);

wbks.ReleaseDispatch();

exlapp.ReleaseDispatch();

D,与上面第一种方法一样,可以插入记录:

UpdateData();

//读入数据

if("

==m_name) 

//判断名字输入有效

MessageBox("

Pleaseinputarightname"

if(0>

=m_age||100<

=m_age) 

//判断年龄输入有效

Pleaseinputarightage"

char*p=strupr(_strdup(m_gener));

if(strcmp(p,"

FEMALE"

)&

&

strcmp(p,"

MALE"

))//判断性别输入有效

Pleaseinputarightgener"

Rangerange;

RangeusedRange;

))//启动服务器

lpDisp=wbks.Open(strPath, 

//初始化.

wbk.AttachDispatch(lpDisp);

whts.AttachDispatch(wbk.GetWorksheets());

lpDisp=wbk.GetActiveSheet();

wht.AttachDispatch(lpDisp);

秘密

QQ

usedRange.AttachDispatch(wht.GetUsedRange());

range.AttachDispatch(usedRange.GetRows());

longiRowNum=range.GetCount();

//已经使用的行数

range.AttachDispatch(wht.GetCells());

range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long

(1)),COleVariant(m_name));

range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long

(2)),COleVariant(m_age));

range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVariant(m_gener));

wbk.Save();

wbk.Close(avar,COleVariant(strPath),avar);

wbks.Close();

exlapp.Quit();

(完)

分享到新浪微博

阅读(802)|评论

(2)|收藏(0)|打印|举报

前一篇:

结婚流程(转)

后一篇:

vc 

excel 

操作补充

评论 

重要提示:

警惕虚假中奖信息,点击查看详情 

免费任选1000款游戏新手卡[发评论]

你好:

2007-01-1112:

30:

31

我参考你的文章做了一下关于excel的操作

但是执行

ExcelApp.CreateDispatch("

NULL))

AfxmessageBox("

创建Excel服务失败"

exit

(1);

总是失败。

博主回复:

拼命三郎:

2007-01-1209:

06:

12

欢迎光临我的blog 

:

>

对组件得先进行初始化COM

在.app 

文件的InitInstance()函数加入AfxOleInit();

if 

(CoInitialize(NULL)!

=0) 

初始化COM支持库失败!

VC中操作excel表格收藏

摘要:

使用MicrosoftOffice所带的控件来实现代码操作excel表格。

操作系统是MicrosoftXP,办公套装是MicrosoftOffice2003,编程环境是MicrosoftVisualStudio6.0,一切都是Microsoft。

我最近要将数据库中的内容查询出来放到excel表格以便打印,所以上网找了这方面的内容,这里主要是抛砖引玉。

从思路上来看,操作excel表格就是将其打开,然后写入/读出数据,然后关闭。

首先创建一个程序(我的例子是一个MFC的单文档程序),在程序的入口处和出口处先作这样两个步骤来支持COM库:

在程序入口处CXXXApp:

InitInstance()函数AfxEnableControlContainer();

语句之后加入下面几行:

if(CoInitialize(NULL)!

=0)

AfxMessageBox(“初始化COM支持库失败!

”);

exit

(1);

假如这个条件不通过就不能运行起程序。

在程序的出口处CXXXApp:

ExitInstance()函数return语句之前加入下面这句话:

CoUninitialize();

来释放COM支持库。

这样对COM支持库的代码已经完成。

下面要从Office的安装目录中找到对VC操作excel文件的动态库,在某些版本下这个文件是Excel8.olb或者Excel9.olb,在我的版本中是excel.exe这个exe也是动态库的形式,是微软公司主要的文件结果之一。

选择vc的View菜单里面的ClassWizad命令,会弹出一个对话框;

然后点击AddClass…按钮选择Fromatypelibrary,会弹出一个打开对话框,从这里打开Office安装目录下…\Office11\EXCEL.EXE文件,从里面选择几个要用到的类:

_Application,Workbooks,_Wrokbook,Worksheets,_WorkSheet,Range,点击OK按钮。

会在程序中生成一个excel.h和excel.cpp文件,这些文件中包含了刚才我们选择的几个类的代码。

下面介绍一下这几个类:

在vc操纵excel的exe动态库里面有好多个对象模型,就是刚才在创建过程中看到的那个列表,但是经常用到的有这么几个:

_Application,Workbooks,_Wrokbook,Worksheets,_WorkSheet,Range,Charts和_Chart,最后面的两个是用来操作图表的,我没有用到所以这里也就不记录了。

_Application:

这里的Application就是Excel本身,众所周知,一个Excel可以包含多个工作簿,每个工作簿又可以包含多个工作表,而每个工作表又可以包含多个区域或者图表,所以这里他们是树型的结构关系,而application最基本的一个功能就是找到它的子项工作簿。

果然,我们在引入我们程序的Application类中看到了这样的成员函数:

GetWorkbooks()。

既然application就是excel,那么打开程序,退出程序,显示/隐藏程序这些基本的操作都可以在这个类的成员函数中找到,果不其然。

Workbooks:

这个对象是一个容器对象,它里面存放着所有打开的工作簿。

因此,我们可以猜测它一定有添加,查找,打开/关闭工作簿的功能。

(本程序中使用excel的一个xlt模板来生成一个xls文件就是使用了这个容器对象的添加功能。

_Workbook:

这是一个工作簿,也就相当于一个xls文件。

Excel可以同时打开多个工作簿,所以工作簿之间必定能够互相切换,每个工作簿可以关联工作表容器并获得工作表的索引。

Worksheets:

也是一个容器对象,和Workbooks类似。

_Worksheet:

这个就是我们看到的工作表,比如Sheet1,sheet2等等。

Rang:

就是我们看到的能选中的方框的大小。

而我们所要作的操作基本上是以区域为单位进行的。

介绍完这些,就添加一个菜单,来响应操作excel的命令。

然后下面附带这个函数的内容,注释还算可以吧,并且附上网上不知道谁写的但是转载极多的一个封装类。

viewplaincopytoclipboardprint?

1._Application 

_app;

 

2._Workbook 

_workBook;

3._Worksheet 

_workSheet;

4.Worksheets 

workSheets;

5.Workbooks 

workBooks;

6.Range 

range;

7.Range 

copyFrom;

8.Range 

copyTo;

9. 

10.if(!

_app.CreateDispatch("

 

NULL)) 

11.{ 

12. 

创建Excel服务失败!

信息提示"

MB_OK);

13. 

14.} 

15.//利用模板建立新文档 

16.workBooks.AttachDispatch(_app.GetWorkbooks());

17._workBook.AttachDispatch(workBooks.Add(_variant_t("

\"

C:

\\Documents 

and 

Settings\\模板.xlt\"

)));

//你可以自己创建一个模板,并自由设定目录 

18.//得到worksheets 

19.workSheets.AttachDispatch(_workBook.GetWorksheets());

20.//得到workSheet 

21._workSheet.AttachDispatch(workSheets.GetItem(_variant_t("

sheet1"

22.//得到拷贝的母板 

23.copyFrom.AttachDispatch(_workSheet.GetRange(_variant_t("

A3"

), 

_variant_t("

Q6"

24.copyTo.AttachDispatch(_workSheet.GetRange(_variant_t("

A61"

25.//得到全部的cells 

26.range.AttachDispatch(_workSheet.GetCells());

27. 

28./////////////////////////////////////////////////////////////////////////////////////////////////// 

29.// 

上边是头 

30. 

31./* 

32.中间要做的工作有这两项:

设置数据和拷贝格式 

33.设置数据就是将数据库中查询出来的数据写入表格,拷贝格式就是将表格拷贝到别的地方。

34.*/ 

35.//写入数据 

36.range.SetItem(_variant_t((long)3), 

_variant_t((long)1), 

写入数据了"

));

37.range.SetItem(_variant_t((long)5), 

重新写入数据了"

38.//拷贝一段区域到另外的一段区域 

39.copyFrom.Copy(_variant_t(copyTo));

40.range.SetItem(_variant_t((long)61), 

123"

41. 

42.//显示excel表格 

43. 

_app.SetVisible(TRUE);

44.//保存为文件 

45._app.SetDisplayAlerts(FALSE);

//隐藏弹出的对话框 

46._workSheet.SaveAs("

d:

\\Test.xls"

vtMissing,vtMissing,vtMissing,vtMissing, 

47. 

vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);

48._app.Quit();

49.//下边是尾 

50./////////////////////////////////////////////////////////////////////////////////////////////////// 

51.copyFrom.ReleaseDispatch();

52.copyTo.ReleaseDispatch();

53.range.ReleaseDispatch();

54._workSheet.ReleaseDispatch();

55.workSheets.ReleaseDispatch();

56._workBook.ReleaseDispatch();

57.workSheets.ReleaseDispatch();

58._app.ReleaseDispatch();

别人的代码:

1..h文件:

2.#include 

comdef.h"

3.#include 

excel.h"

4.class 

ExcelFile 

5.{ 

6.public:

7.void 

ShowInExcel(bool 

bShow);

8.CString 

GetCell(int 

iRow, 

int 

iColumn);

9.int 

GetCellInt(int 

10.int 

GetRowCount();

11.int 

GetColumnCount();

12.bool 

LoadSheet(int 

iIndex);

13.CString 

GetSheetName(int 

14.static 

void 

InitExcel();

15.static 

ReleaseExcel();

16.int 

GetSheetCount();

17.bool 

Open(CString 

FileName);

18.ExcelFile();

19.virtual 

~ExcelFile();

20.protected:

21.private:

22.static 

_Application 

m_ExcelApp;

23. 

24.Workbooks 

m_Books;

25._Workbook 

m_Book;

26.Worksheets 

m_sheets;

27._Worksheet 

m_sheet;

28.Range 

m_Rge;

29.};

30..cpp文件:

31.ExcelFile:

ExcelFile() 

32.{ 

33.} 

34.ExcelFile:

~ExcelFile() 

35.{ 

36.m_Rge.ReleaseDispatch();

37.m_sheet.ReleaseDispatch();

38.m_sheets.ReleaseDispatch();

39.m_Book.ReleaseDispatch();

40.m_Books.ReleaseDispatch();

41.} 

42.void 

ExcelFile:

InitExcel() 

43.{ 

44.//创建Excel 

2000服务器(启动Excel) 

45.if 

(!

m_ExcelApp.CreateDispatch("

NULL)) 

46.{ 

47.AfxMessageBox("

创建Excel服务失败!

48.exit

(1);

49.} 

50.} 

51.void 

ReleaseExcel() 

52.{ 

53.m_ExcelApp.ReleaseDispatch();

54.} 

55.bool 

FileName) 

56.{ 

57.//打开excel文件 

58.//利用模板文件建立新文档 

59.m_Books.AttachDispatch(m_ExcelApp.GetWorkbooks(),true);

60.LPDISPATCH 

lpDis 

NULL;

61.lpDis 

m_Books.Add(_variant_t(FileName));

// 

如何判断文件是否打开?

62.if 

(lpDis) 

63.{ 

64.m_Book.AttachDispatch(lpDis);

65.//得到Worksheets 

66.m_sheets.AttachDispatch(m_Book.GetWorksheets(),true);

67.return 

true;

68.} 

69.return 

false;

70.} 

71.int 

GetSheetCount() 

72.{ 

73.return 

m_sheets.GetCount();

74.} 

75.CString 

iIndex) 

76.{ 

77._Worksheet 

sheet;

78.sheet.AttachDispatch(m_sheets.Ge

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1