VC 数据导出到ExcelWord下载.docx
- 文档编号:20692881
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:6
- 大小:18.66KB
VC 数据导出到ExcelWord下载.docx
《VC 数据导出到ExcelWord下载.docx》由会员分享,可在线阅读,更多相关《VC 数据导出到ExcelWord下载.docx(6页珍藏版)》请在冰豆网上搜索。
);
returnFALSE;
}
为了能调用Excel的接口我们打开MFCClassWizard->
Automation->
AddClass->
Fromatypelibrary,选择[Excel的安装路径]\EXCEL.exe,然后把所有的类都添加进去,头文件为excel.h,源文件为excel.cpp。
当然,你也可以只把一些比较常用的类如_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加进去,因为网上流传的绝大部分教程都只添加这几个类,这完全根据你个人的需要。
但在本例中我们至少还要用到Interior类(设置底色),Font类(设置字体),而且这样做又简单又方便扩展功能,不管三七二十一全部弄进去吧!
但这样做会有一个问题,有可能产生类的名字冲突,例如本来你自己写了一个类叫Font,当你全部添加时又再次加入了Font类,这样就重复定义了,不过可以通过名字空间来解决这个问题。
再在VCExcelDlg.cpp文件的头部添加(如果系统已经自动添加就不要重复添加了):
#include"
VCExcel.h"
comdef.h"
这样一来我们的程序就可以自由调用EXCEL了,一切准备就绪。
下面先在CVCExcelDlg中添加如下成员变量,用来操控Excel应用程序、工作簿和单元格。
Rangem_ExlRge;
_Worksheetm_ExlSheet;
Worksheetsm_ExlSheets;
_Workbookm_ExlBook;
Workbooksm_ExlBooks;
_Applicationm_ExlApp;
我们利用加载Excel模板来生成要求的表格,在本工程Debug文件夹中建立一个Excel文件,命名为Template.xls。
我们的OnRunexcel()代码如下(详见注释):
voidCVCExcelDlg:
OnRunexcel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
//用m_ExlApp对象创建Excel2003进程
if(!
m_ExlApp.CreateDispatch("
Excel.Application"
NULL))
{
AfxMessageBox("
创建Excel服务失败!
"
return;
//设置为可见
m_ExlApp.SetVisible(TRUE);
///////////////////下面得到应用程序所在的路径///////////////////
CStringtheAppPath,theAppName;
charPath[MAX_PATH];
GetModuleFileName(NULL,Path,MAX_PATH);
//得到应用程序的全路径
theAppPath=(CString)Path;
theAppName=AfxGetApp()->
m_pszAppName;
theAppName+="
.exe"
;
//把最后的文件名去掉
intlength1,length2;
length1=theAppPath.GetLength();
length2=theAppName.GetLength();
theAppPath.Delete(length1-length2,length2);
////////////////////////////////////////////////////////////////
CStringTempPath="
TempPath=theAppPath+"
Template.xls"
//EXCEL模板的路径
m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);
m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);
//加载EXCEL模板
m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);
//加载Sheet页面
//添加新的Sheet页面
m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing);
//删除第二个Sheet页面
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);
m_ExlSheet.Delete();
//把第一个Sheet页面的名字改变为TestSheet
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_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((long)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("
课时"
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_ExlRge.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.SetItem(_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("
m_ExlRge.SetItem(_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,右=-4152
//垂直对齐:
默认=2,居中=-4108,左=-4160,右=-4107
m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108));
m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108));
///////设置整体的字体、字号及颜色//////
Fontft;
ft.AttachDispatch(m_ExlRge.GetFont());
ft.SetName(_variant_t("
宋体"
//字体
ft.SetColorIndex(_variant_t((long)11));
//字的颜色
ft.SetSize(_variant_t((long)12));
//字号
///////////设置标题字体及颜色//////////
)));
ft.SetBold(_variant_t((long)1));
//粗体
ft.SetSize(_variant_t((long)13));
ft.SetColorIndex(_variant_t((long)2));
CellFormatcf;
cf.AttachDispatch(m_ExlRge.GetCells());
//////////////设置底色/////////////////
Interiorit;
it.AttachDispatch(m_ExlRge.GetInterior());
it.SetColorIndex(_variant_t((long)11));
//标题底色
////表格内容的底色////
A2"
D5"
it.SetColorIndex(_variant_t((long)15));
//////////////为表格设置边框/////////////
RangeUnitRge;
CStringCellName;
for(inti=1;
i<
=4;
i++)
for(intj=1;
j<
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),_variant_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();
//退出程序m_ExlApp.Quit();
小结:
一年前就想写这个东西了,因为网上讲VC与Office编程的资料实在是太少了,即使有也很片面(VB讲这方面的东西却又多又全,郁闷~),想当初做这个东西的时候上网查资料快查疯掉了,最后还是一堆问题没有解决。
哈哈,现在无聊静下心来一研究发现原来VC蹂躏Excel也不是一件难事啊,在这个例子里面包含了很多常用的功能,相信做一般的报表是没什么问题的。
要是做更复杂的报表怎么办呢?
一个例子也不可能包括方方面面呀,那确实,因此有很多东西是需要读者自己探讨的。
下面我告诉大家一个方法,细心的读者可能已经发现有些参数不知道是从哪里蹦出来的,例如:
水平对齐:
默认=1,居中=-4108,左=-4131,右=-4152。
这就要用到Office的宏录制功能(什么?
你没听过?
网上去查吧^__^),把你要的操作用宏录制下来,然后用VB打开,单步调试的时候就能发现这些秘密了!
上面例子中的参数都是DoDo在宏里面找到滴,哈哈,是不是很简单?
快去试试吧~
Range
range
=
mWorkSheet.GetRange(COleVariant("
A1"
),COleVariant("
C4"
//设定待操作的单元格范围
range.SetNumberFormatLocal(COleVariant("
@"
//设定你的宏中实现的单元格格式设置为文本格式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 数据导出到Excel 数据 导出 Excel