其余选择,默认直接点击完成即可。生成一个基本对话框。
将上面的默认控件删除。
依次从接口:_Application、_Workbook、_Worksheet、Workbooks、Worksheets、Font、Range(暂时只用到这些)生成对应的类(CApplication 、CWorkbook、CWorksheet、CWorkbook、Cworksheets、CFont0、CRange)如下图所示。点击确定,总生成对应.h、.cpp文件并添加到工程。
在所建对话框添加一个按钮,名字修改为导出EXCEL,ID修改为IDC_BTN_EXCEL,添加一个消息消息函数(这里为OnBtnExcel())。
#include "CApplication.h"
#include "CFont0.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
if(CoInitialize(NULL)!=0)
{
AfxMessageBox(_T("初始化失败"));
}
同时在ExitInstance里释放资源
CoUninitialize(); //释放com资源
/**********************************************************************
*作者:ywx2904
*函数名:OnBtnExcel
*功 能:创建Excel,向里面添加内容,并导出
*参 数: 无
*返回值:无
***********************************************************************/
void CExcelTestDlg::OnBtnExcel()
{
//1.创建基本对象
CApplication App; //创建应用程序实例
CWorkbooks Books; //工作簿,多个Excel文件
CWorkbook Book; //单个工作簿
CWorksheets sheets;//多个sheet页面
CWorksheet sheet; //单个sheet页面
CRange range; //操作单元格
//2.打开指定Excel文件,如果不存在就创建
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,(TCHAR*)path);//获取当前路径
CString strExcelFile =(TCHAR*) path;
CString strdevName = _T("\\Test.xlsx"); //xls也行
strExcelFile += strdevName;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
LPDISPATCH lpdisp = NULL;
//1.创建Excel实例
if(!App.CreateDispatch(_T("Excel.Application"),NULL))
{
AfxMessageBox(_T("创建Excel实例失败"));
exit(-1);
}
else
{
AfxMessageBox(_T("创建成功"));
}
App.put_Visible(TRUE); //打开Excel
App.put_UserControl(FALSE);
//2. 得到workbooks容器
Books.AttachDispatch(App.get_Workbooks());
Book.AttachDispatch(Books.Add(covOptional));
sheets.AttachDispatch(Book.get_Worksheets());
sheet.AttachDispatch(sheets.get_Item(COleVariant((short)1))); //获取sheet1
sheet.put_Name(_T("TestName")); //设置sheet1名字
//3. 加载要合并的单元格
range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")),COleVariant(_T("E2"))),TRUE);
range.Merge(COleVariant((long)0)); //合并单元格
//4. 设置表格内容
range.AttachDispatch(sheet.get_Cells(),TRUE); //加载所有单元格
range.put_Item(COleVariant((long)2),COleVariant((long)2),COleVariant(_T("电气工程及其自动化课程统计")));
range.put_Item(COleVariant((long)3),COleVariant((long)2),COleVariant(_T("课程名称")));
range.put_Item(COleVariant((long)3),COleVariant((long)3),COleVariant(_T("课时")));
range.put_Item(COleVariant((long)3),COleVariant((long)4),COleVariant(_T("难度")));
range.put_Item(COleVariant((long)3),COleVariant((long)5),COleVariant(_T("教学方式")));
range.put_Item(COleVariant((long)4),COleVariant((long)2),COleVariant(_T("电磁场")));
range.put_Item(COleVariant((long)4),COleVariant((long)3),COleVariant(_T("30")));
range.put_Item(COleVariant((long)4),COleVariant((long)4),COleVariant(_T("变态难")));
range.put_Item(COleVariant((long)4),COleVariant((long)5),COleVariant(_T("老师讲课")));
range.put_Item(COleVariant((long)5),COleVariant((long)2),COleVariant(_T("电机学")));
range.put_Item(COleVariant((long)5),COleVariant((long)3),COleVariant(_T("40")));
range.put_Item(COleVariant((long)5),COleVariant((long)4),COleVariant(_T("难")));
range.put_Item(COleVariant((long)5),COleVariant((long)5),COleVariant(_T("老师讲课加实验")));
range.put_Item(COleVariant((long)6),COleVariant((long)2),COleVariant(_T("PLC")));
range.put_Item(COleVariant((long)6),COleVariant((long)3),COleVariant(_T("20")));
range.put_Item(COleVariant((long)6),COleVariant((long)4),COleVariant(_T("普通")));
range.put_Item(COleVariant((long)6),COleVariant((long)5),COleVariant(_T("老师讲课加实验")));
//range.put_Item(COleVariant((long)7),COleVariant((long)2),COleVariant(_T("电力系统")));
//range.put_Item(COleVariant((long)7),COleVariant((long)3),COleVariant(_T("50")));
//range.put_Item(COleVariant((long)7),COleVariant((long)4),COleVariant(_T("难")));
//range.put_Item(COleVariant((long)7),COleVariant((long)5),COleVariant(_T("老师讲课加实验")));
range.AttachDispatch(sheet.get_UsedRange());//加载已使用的单元格
range.put_WrapText(COleVariant((long)1)); //设置文本自动换行
//5.设置对齐方式
//水平对齐:默认 1 居中 -4108, 左= -4131,右=-4152
//垂直对齐:默认 2 居中 -4108, 左= -4160,右=-4107
range.put_VerticalAlignment(COleVariant((long)-4108));
range.put_HorizontalAlignment(COleVariant((long)-4108));
//6.设置字体颜色
CFont0 ft;
ft.AttachDispatch(range.get_Font());
ft.put_Name(COleVariant(_T("楷体"))); //字体
ft.put_ColorIndex(COleVariant((long)1));//颜色 //黑色
ft.put_Size(COleVariant((long)12)); //大小
range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")),COleVariant(_T("E2"))),TRUE);
ft.AttachDispatch(range.get_Font());
ft.put_Name(COleVariant(_T("华文行楷")));
ft.put_Bold(COleVariant((long)1));
ft.put_ColorIndex(COleVariant((long)5)); //颜色
ft.put_Size(COleVariant((long)18)); //大小
Book.SaveCopyAs(COleVariant(strExcelFile)); //保存
Book.put_Saved(TRUE);
//8.释放资源
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
Book.ReleaseDispatch();
Books.ReleaseDispatch();
App.ReleaseDispatch();
}
http://blog.csdn.net/xiaoxiangyuan123456/article/details/70941588
http://m.blog.csdn.net/Augusdi/article/details/5782575