MFC创建新Excel文档并设置其中的格式和字体+底纹(OLE/COM)

来源:互联网 发布:超级返利网淘宝 编辑:程序博客网 时间:2024/05/17 03:42

原文链接:http://blog.sina.com.cn/s/blog_71265dc90101b523.html

生成Excel.obl对象类excel.h

创建对象

[cpp] viewplaincopyprint?
  1. Range m_ExlRge;   
  2. _Worksheet m_ExlSheet;   
  3. Worksheets m_ExlSheets;   
  4. _Workbook m_ExlBook;   
  5. Workbooks m_ExlBooks;   
  6. _Application m_ExlApp;   

编写Excel代码

 

[cpp] viewplaincopyprint?
  1.     //用m_ExlApp对象创建Excel2003进程   
  2.   
  3.    if(!m_ExlApp.CreateDispatch("Excel.Application",NULL))   
  4.      
  5.           AfxMessageBox("创建Excel服务失败!");   
  6.           return  
  7.      
  8.   
  9.    //设置为可见   
  10.    m_ExlApp.SetVisible(TRUE);   
  11.   
  12.    ///////////////////下面得到应用程序所在的路径///////////////////   
  13.    CString theAppPath,theAppName;   
  14.    char Path[MAX_PATH];   
  15.   
  16.    GetModuleFileName(NULL,Path,MAX_PATH);//得到应用程序的全路径   
  17.    theAppPath=(CString)Path;   
  18.   
  19.    theAppName=AfxGetApp()->m_pszAppName;   
  20.    theAppName+=".exe"  
  21.   
  22.    //把最后的文件名去掉   
  23.    int length1,length2;   
  24.   
  25.    length1=theAppPath.GetLength();   
  26.    length2=theAppName.GetLength();   
  27.   
  28.    theAppPath.Delete(length1-length2,length2);   
  29. ////////////////////////////////////////////////////////////////   
  30.   
  31.   
  32.    CString TempPath=""  
  33.   
  34.    TempPath=theAppPath+"Template.xls";//EXCEL模板的路径   
  35.   
  36.    m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);   
  37.   
  38.    m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载EXCEL模板   
  39.   
  40.    m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面   
  41.   
  42.    //添加新的Sheet页面   
  43.    m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing);   
  44.   
  45.    //删除第二个Sheet页面   
  46.    m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);   
  47.    m_ExlSheet.Delete();   
  48.   
  49.    //把第一个Sheet页面的名字改变为TestSheet   
  50.    m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE);   
  51.    m_ExlSheet.SetName("TestSheet");   
  52.   
  53.   
  54.    ///////合并第一行单元格A1至D1//////   
  55.   
  56.    //加载要合并的单元格   
  57.    m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")),TRUE);   
  58.   
  59.    m_ExlRge.Merge(_variant_t((long)0));   
  60.   
  61.    ////////设置表格内容////////   
  62.   
  63.    m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加载所有单元格   
  64.   
  65.    m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("数学系研究生课程统计"));   
  66.   
  67.    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t("课程名"));   
  68.    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("课时"));   
  69.    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("难度"));   
  70.    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t("教学方式"));   
  71.   
  72.    m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t("泛函分析"));   
  73.    m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t("60"));   
  74.    m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)3),_variant_t("普通"));   
  75.    m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)4),_variant_t("老师讲课"));   
  76.   
  77.    m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)1),_variant_t("微分流形"));   
  78.    m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)2),_variant_t("40"));   
  79.    m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)3),_variant_t("变态难"));   
  80.    m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)4),_variant_t("自学"));   
  81.   
  82.    m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)1),_variant_t("二阶椭圆型方程与方程组"));   
  83.    m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)2),_variant_t("60"));   
  84.    m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)3),_variant_t("很难"));   
  85.    m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)4),_variant_t("讨论"));   
  86.   
  87.   
  88.    m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());//加载已使用的单元格   
  89.   
  90.    m_ExlRge.SetWrapText(_variant_t((long)1));//设置单元格内的文本为自动换行   
  91.   
  92.    //设置齐方式为水平垂直居中   
  93.    //水平对齐:默认=1,居中=-4108,左=-4131,右=-4152   
  94.    //垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107   
  95.    m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108));   
  96.    m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108));   
  97.   
  98.    ///////设置整体的字体、字号及颜色//////   
  99.   
  100.    Font ft;   
  101.   
  102.    ft.AttachDispatch(m_ExlRge.GetFont());   
  103.   
  104.    ft.SetName(_variant_t("宋体"));//字体   
  105.    ft.SetColorIndex(_variant_t((long)11));//字的颜色   
  106.    ft.SetSize(_variant_t((long)12));//字号   
  107.   
  108.    ///////////设置标题字体及颜色//////////   
  109.   
  110.    m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")));   
  111.   
  112.    ft.AttachDispatch(m_ExlRge.GetFont());   
  113.   
  114.    ft.SetBold(_variant_t((long)1));//粗体   
  115.    ft.SetSize(_variant_t((long)13));   
  116.    ft.SetColorIndex(_variant_t((long)2));   
  117.   
  118.    CellFormat cf;   
  119.    cf.AttachDispatch(m_ExlRge.GetCells());   
  120.   
  121.    //////////////设置底色/////////////////   
  122.   
  123.    Interior it;   
  124.   
  125.    it.AttachDispatch(m_ExlRge.GetInterior());   
  126.   
  127.    it.SetColorIndex(_variant_t((long)11));//标题底色   
  128.   
  129.    ////表格内容的底色////   
  130.   
  131.    m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A2"),_variant_t("D5")));   
  132.   
  133.    it.AttachDispatch(m_ExlRge.GetInterior());   
  134.   
  135.    it.SetColorIndex(_variant_t((long)15));   
  136.   
  137.   
  138.    //////////////为表格设置边框/////////////   
  139.   
  140.    Range UnitRge;   
  141.    CString CellName;   
  142.   
  143.    for(int i=1;i<=4;i++)   
  144.      
  145.           for(int j=1;j<=4;j++)   
  146.                 
  147.                  CellName.Format("%c%d",j+64,i);//单元格的名称   
  148.   
  149.                  UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));//加载单元格   
  150.   
  151.                  //LineStyle=线型 Weight=线宽 ColorIndex=线的颜色(-4105为自动)   
  152.                  UnitRge.BorderAround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtMissing);//设置边框   
  153.             
  154.      
  155.   
  156.   
  157.    //释放对象(相当重要!)   
  158.    m_ExlRge.ReleaseDispatch();   
  159.    m_ExlSheet.ReleaseDispatch();   
  160.    m_ExlSheets.ReleaseDispatch();   
  161.    m_ExlBook.ReleaseDispatch();   
  162.    m_ExlBooks.ReleaseDispatch();   
  163.    //m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错   
  164.    m_ExlApp.ReleaseDispatch();   
  165.   
  166.    //退出程序 m_ExlApp.Quit(); 
阅读全文
0 0
原创粉丝点击