ImageVerifierCode 换一换
格式:DOCX , 页数:5 ,大小:26.46KB ,
资源ID:6873061      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6873061.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VC导出数据到EXCEL.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VC导出数据到EXCEL.docx

1、VC导出数据到EXCELVC 导出数据到 EXCEL .我们制作应用软件的时候,经常要把结果以报表的形式 输出,当前使用较为广泛的当然是 Excel 表格,本文简略介 绍在 VC+6.0 中如何使用 Excel2003 的库函数并对其进行 编程。先创建一个对话框工程,命名为 VCExcel 。在对话框 中添加一个按钮, 控件 ID 为 ID_RUNEXCEL ,界面如下 (是 不是很搞笑哇,不过没关系,它照样能实现强大的功能! )。再在该按钮上添加消息 BN_CLICKED ,其消息映射函 数为 OnRunexcel() ,下面我们的工作就是要完成这个 OnRunexcel() 函数。在这里我

2、们通过一个实例来说明 VC 是 如何调用 Excel2003 的接口编程的。 我们要编程输出一个如下表格。 格式如下:1、表头的字体为宋体,加粗,颜色为白色,底色为深 蓝,垂直水平居中对齐;2、表中正文内容字体为宋体,颜色为深蓝,底色为灰 色,垂直水平居中对齐;3、全部边框,文本自动换行。在 BOOL CVCExcelApp:InitInstance() 之中, int nResponse = dlg.DoModal() 语句之后加入如下代码: if(!AfxOleInit()/ 初始化 COM 库AfxMessageBox( 初始化 COM 失败);return FALSE;为了能调用 Ex

3、cel 的接口我们打开 MFCClassWizard->Automation->Add Class->From a type library ,选择 Excel 的安装路径 /EXCEL.exe ,然后把 所有的类都添加进去, 头文件为 excel.h ,源文件为 excel.cpp 当然,你也可以只把一些比较常用的类如 _Application 、 Workbooks 、_Workbook 、Worksheets 、_Worksheet 、Range 加进去,因为网上流传的绝大部分教程都只添加这几个类, 这完全根据你个人的需要。但在本例中我们至少还要用到 Interior

4、类(设置底色) , Font 类(设置字体) ,而且这样做 又简单又方便扩展功能,不管三七二十一全部弄进去吧!但 这样做会有一个问题,有可能产生类的名字冲突,例如本来 你自己写了一个类叫 Font ,当你全部添加时又再次加入了 Font 类, 这样就重复定义了, 不过可以通过名字空间来解决 这个问题。再在 VCExcelDlg.cpp 文件的头部添加(如果系 统已经自动添加就不要重复添加了) : #include VCExcel.h #include comdef.h这样一来我们的程序就可以自由调用 EXCEL 了,一切准备 就绪。 下面先在 CVCExcelDlg 中添加如下成员变量, 用来

5、操控 Excel 应用程序、工作簿和单元格。Range m_ExlRge;_Worksheet m_ExlSheet;Worksheets m_ExlSheets;_Workbook m_ExlBook;Workbooks m_ExlBooks;_Application m_ExlApp;我们利用加载 Excel 模板来生成要求的表格,在本工程Debug 文件夹中建立一个 Excel 文件,命名为 Template.xls 。 我们的 OnRunexcel() 代码如下(详见注释) : void CVCExcelDlg:OnRunexcel()/ TODO: Add your control

6、notification handlercode here / 用 m_ExlApp 对象创建 Excel2003 进程if(!m_ExlApp.CreateDispatch(Excel.Application,NULL)AfxMessageBox( 创建 Excel 服务失败 !); return; / 设置为可见下面得到应用程序所在的路径 /CString theAppPath,theAppName;char PathMAX_PATH;GetModuleFileName(NULL,Path,MAX_PATH);/ 得到应用 程序的全路径theAppPath=(CString)Path; t

7、heAppName=AfxGetApp()->m_pszAppName;theAppName+=.exe; /把最后的文件名去 掉int length1,length2;length1=theAppPath.GetLength(); length2=theAppName.GetLength();theAppPath.Delete(length1-length2,length2); /CString TempPath=;TempPath=theAppPath+Template.xls;/EXCEL 模板的路 径 m_ExlBooks.AttachDispatch(m_ExlApp.GetW

8、orkbooks(),T RUE);m_ExlBook.AttachDispatch(m_ExlBooks.Add(_variant_t)T empPath),TRUE);/ 加载 EXCEL 模板 m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRm_ExlSheets.Add(vtMissing,vtMissing,_variant_t(long)1),v tMissing); / 删除第二个 Sheet 页面m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_varian t_t(long)2)

9、,TRUE);m_ExlSheet.Delete(); / 把第一个 Sheet 页面的名字改变为 TestSheetm_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_varian t_t(long)1),TRUE);m_ExlSheet.SetName(TestSheet); / 合并第一行单元格 A1 至 D1/ /加载要合并的单元格m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant _t(A1),_variant_t(D1),TRUE);m_ExlRge.Merge(_variant_t(l

10、ong)0); / 设置表格内容 / m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);/ /加载所有单元格m_ExlRge.SetItem(_variant_t(long)1),_variant_t(long)1), variant_t( 数学系研究生课程统计 );m_ExlRge.SetItem(_variant_t(long)2),_variant_t(long)1), variant_t( 课程名 );m_ExlRge.SetItem(_variant_t(long)2),_variant_t(long)2), variant_t(

11、 课时 );m_ExlRge.SetItem(_variant_t(long)2),_variant_t(long)3), variant_t( 难度 );m_ExlRge.SetItem(_variant_t(long)2),_variant_t(long)4), variant_t( 教学方式 );m_ExlRge.SetItem(_variant_t(long)3),_variant_t(long)1), variant_t( 泛函分析 );m_ExlRge.SetItem(_variant_t(long)3),_variant_t(long)2), variant_t(60);m_Ex

12、lRge.SetItem(_variant_t(long)3),_variant_t(long)3), variant_t( 普通 );m_ExlRge.SetItem(_variant_t(long)3),_variant_t(long)4), variant_t( 老师讲课 );m_ExlRge.SetItem(_variant_t(long)4),_variant_t(long)1), variant_t( 微分流形 );m_ExlRge.SetItem(_variant_t(long)4),_variant_t(long)2), variant_t(40);m_ExlRge.SetIt

13、em(_variant_t(long)4),_variant_t(long)3), variant_t( 变态难 );m_ExlRge.SetItem(_variant_t(long)4),_variant_t(long)4), variant_t( 自学 );m_ExlRge.SetItem(_variant_t(long)5),_variant_t(long)1), variant_t( 二阶椭圆型方程与方程组 );m_ExlRge.SetItem(_variant_t(long)5),_variant_t(long)2), variant_t(60);m_ExlRge.SetItem(_

14、variant_t(long)5),_variant_t(long)3), variant_t( 很难 );m_ExlRge.SetItem(_variant_t(long)5),_variant_t(long)4),_variant_t( 讨论 );m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange();/ /加载已使用的单元格 m_ExlRge.SetWrapText(_variant_t(long)1);/ 设置单元格 内的文本为自动换行 /设置齐方式为水平垂直居中水平对齐:默认=1,居中=-4108,左=-4131,右=-4152II垂直对齐

15、:默认= 2,居中=-4108,左=-4160,右=-4107m_ExlRge.SetHorizontalAlignment(_variant_t(long)-4108);m_ExlRge.SetVerticalAlignment(_variant_t(long)-4108);IIIIIII设置整体的字体、字号及颜色 IIIIII Font ft;ft.AttachDispatch(m_ExlRge.GetFont();ft.SetName(_variant_t(” 宋体);/字体ft.SetColorIndex(_variant_t(long)11);II 字的颜色 ft.SetSize(_

16、variant_t(long)12);/ 字号/ 设置标题字体及颜色 /m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t(A1),_variant_t(D1); ft.AttachDispatch(m_ExlRge.GetFont(); ft.SetBold(_variant_t(long)1);/ 粗体ft.SetSize(_variant_t(long)13);ft.SetColorIndex(_variant_t(long)2);CellFormat cf;cf.AttachDispatch(m_ExlRge.GetCells(

17、); / 设置底色 / Interior it; it.AttachDispatch(m_ExlRge.GetInterior(); it.SetColorIndex(_variant_t(long)11);/ 标题底色 / 表格内容的底色 / m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant _t(A2),_variant_t(D5);it.AttachDispatch(m_ExlRge.GetInterior(); it.SetColorIndex(_variant_t(long)15); / 为 表格设置边框 / Range Uni

18、tRge;CString CellName; for(int i=1;i<=4;i+)for(int j=1;j<=4;j+)CellName.Format(%c%d,j+64,i);/ 单元格的名称 UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t( CellName),_variant_t(CellName);/ 加载单元格 /LineStyle= 线型 Weight= 线宽 ColorIndex= 线的颜色 (-4105 为自动 )UnitRge.BorderAround(_variant_t(long)1),_varia

19、nt_t(long)2),_variant_t(long)-4105),vtMissing);/ 设置边框 / 释放对象(相当重要! )m_ExlRge.ReleaseDispatch(); m_ExlSheet.ReleaseDispatch(); m_ExlSheets.ReleaseDispatch(); m_ExlBook.ReleaseDispatch(); m_ExlBooks.ReleaseDispatch();/m_ExlApp 一定要释放,否则程序结束后还会有一 个 Excel 进程驻留在内存中,而且程序重复运行的时候会出 错m_ExlApp.ReleaseDispatch(

20、); / 退出程序m_ExlApp.Quit(); 小结:一年前就想写这个东西了, 因为网上讲 VC 与 Office 编程的资料实在是太少了,即使有也很片面( VB 讲这方面 的东西却又多又全,郁闷),想当初做这个东西的时候上网查资料快查疯掉了,最后还是一堆问题没有解决。哈哈, 现在无聊静下心来一研究发现原来 VC 蹂躏 Excel 也不是一 件难事啊,在这个例子里面包含了很多常用的功能,相信做 一般的报表是没什么问题的。要是做更复杂的报表怎么办呢? 一个例子也不可能包括方方面面呀,那确实,因此有很多东 西是需要读者自己探讨的。下面我告诉大家一个方法,细心 的读者可能已经发现有些参数不知道是从哪里蹦出来的,例 如:水平对齐:默认=1,居中=-4108,左=-4131,右=-4152 这就要用到 Office 的宏录制功能 (什么?你没听过?网上去 查吧A_A),把你要的操作用宏录制下来,然后用 VB打开,单步调试的时候就能发现这些秘密了!上面例子中的参数都 是 DoDo 在宏里面找到滴,哈哈,是不是很简单?快去试试 吧

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

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