VC 操作Excel 2007的基本操作!

来源:互联网 发布:淘宝2.5亿火炬红包 编辑:程序博客网 时间:2024/05/16 19:18
  1.    // 变量的定义  
  2.     _Application app;  
  3.     Workbooks books;  
  4.     _Workbook book;  
  5.     Worksheets sheets;  
  6.     _Worksheet sheet;  
  7.     Range range;  
  8.     LPDISPATCH lpDisp;      
  9.     COleVariant vResult;  
  10.   
  11.     CString str = "";  
  12.       
  13.     COleVariant  
  14.         covTrue((short)TRUE),  
  15.         covFalse((short)FALSE),  
  16.         covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  
  17.       
  18.     //创建Excel 2003服务器(启动Excel)  
  19.     if (!app.CreateDispatch("Excel.Application",NULL))   
  20.     {   
  21.         AfxMessageBox("Create Excel service failure!");  
  22.         return;  
  23.     }  
  24.   
  25.     // 设置为FALSE时,后面的app.Quit();注释要打开  
  26.     // 否则EXCEL.EXE进程会一直存在,并且每操作一次就会多开一个进程  
  27.     app.SetVisible(TRUE);  
  28.     books.AttachDispatch(app.GetWorkbooks(),true);  
  29.       
  30.     /* 
  31.     *   打开一个工作簿。 
  32.     *   Excel 2000 只需要13个参数就行,Excel 2003需要15个参数 
  33.     */  
  34.     lpDisp = books.Open("E://test.xls",  
  35.         covOptional, covOptional, covOptional, covOptional,  
  36.         covOptional, covOptional, covOptional, covOptional,  
  37.         covOptional, covOptional, covOptional, covOptional,  
  38.         covOptional, covOptional);  
  39.     ASSERT(lpDisp);  
  40.       
  41.     book.AttachDispatch(lpDisp);  
  42.       
  43.     // 得到Worksheets    
  44.     sheets.AttachDispatch(book.GetWorksheets(),true);   
  45.       
  46.     // 得到Worksheet  
  47.     sheet.AttachDispatch(sheets.GetItem(_variant_t((short)(1))));     
  48.       
  49.     // 得到全部Cells   
  50.     range.AttachDispatch(sheet.GetCells(),true);  
  51.   
  52.       
  53.     // 往单元格A1里写入字符串数据,就像操作矩阵一样,第1行第1列  
  54.     range.SetItem(_variant_t((LONG)1),_variant_t((LONG)1),_variant_t("hello word!"));  
  55.   
  56.     // 往单元格A2里写入时间数据  
  57.     range.AttachDispatch(sheet.GetRange(_variant_t("A2"), _variant_t("A2")),true);  
  58.     range.SetValue2(_variant_t("2011/02/15"));  
  59.   
  60.     // 往单元格A3~A6里写入浮点数据  
  61.     range.AttachDispatch(sheet.GetRange(_variant_t("A3"), _variant_t("A6")),true);  
  62.     range.SetValue2(_variant_t((double)3.14));  
  63.   
  64.     // 设置单元格的列宽为12  
  65.     range.AttachDispatch(sheet.GetRange(_variant_t("A1"), _variant_t("A1")),true);  
  66.     range.SetColumnWidth(_variant_t((long)12));  
  67.   
  68.     // 所有单元格居中显示  
  69.     range.AttachDispatch(sheet.GetCells(),true);  
  70.     range.SetHorizontalAlignment(_variant_t((long)-4108)); // -4108:居中,-4131:靠左,-4152:靠右  
  71.     range.SetVerticalAlignment(_variant_t((long)-4108)); // -4108:居中,-4160:靠上,-4107:靠下  
  72.   
  73.     // 读取单元格的数据,第4行第1列  
  74.     range.AttachDispatch(range.GetItem(_variant_t((long)(4)),_variant_t((long)(1))).pdispVal );  
  75.     vResult =range.GetValue(covOptional);  
  76.       
  77.     switch (vResult.vt)  
  78.     {  
  79.     case VT_BSTR:       // 字符串  
  80.         str=vResult.bstrVal;  
  81.         break;  
  82.     case VT_R8:         // 8字节的数字  
  83.         str.Format("%f",vResult.dblVal);  
  84.         break;  
  85.     case VT_DATE:       // 时间格式  
  86.         SYSTEMTIME st;  
  87.         VariantTimeToSystemTime(vResult.date, &st);  
  88.         break;  
  89.     case VT_EMPTY:      // 单元格空的  
  90.         str="";  
  91.         break;  
  92.     }  
  93.     //MessageBox(str);  
  94.   
  95.     Font ft;    // 要插入excel类库里面的Font类,下面类似  
  96.       
  97.     range.AttachDispatch(sheet.GetRange(_variant_t("A3"), _variant_t("A5")),true);  
  98.     ft.AttachDispatch(range.GetFont());  
  99.     ft.SetName(_variant_t("华文行楷")); // 字体   
  100.     ft.SetSize(_variant_t((long)12));   // 字号  
  101.     //ft.SetColorIndex(_variant_t((long)3));    // 字的颜色: 红色  
  102.          ft.SetColor( _variant_t((long) RGB(255, 0, 0) ) );  
  103.     ft.SetBold(_variant_t((long)1));    // 1:粗体,0:非粗体  
  104.   
  105.     Interior it; // 底色设置  
  106.       
  107.     range.AttachDispatch(sheet.GetRange(_variant_t("C3"), _variant_t("E6")),true);  
  108.     it.AttachDispatch(range.GetInterior());       
  109.     it.SetColorIndex(_variant_t((long)20)); // 底色设置为浅青色  
  110.   
  111.     Borders borders; // 先设置区域内所有单元格的边框  
  112.     borders = range.GetBorders();  
  113.     borders.SetColorIndex(_variant_t((long)1));  
  114.     borders.SetLineStyle(_variant_t((long)1));  
  115.     borders.SetWeight(_variant_t((long)2));  
  116.   
  117.     // 然后设置外边框  
  118.     // LineStyle=线型(1~13) Weight=线宽 ColorIndex=线的颜色(-4105为自动, 1为黑色)   
  119.     range.BorderAround(_variant_t((long)9),_variant_t((long)1),_variant_t((long)1),vtMissing);  
  120.   
  121.     range.AttachDispatch(sheet.GetRange(_variant_t("C8"), _variant_t("D9")),true);  
  122.     // 合并单元格  
  123.     range.Merge(_variant_t((long)0));  
  124.   
  125.   
  126.     book.Save();                    // 保存Excel的内容  
  127. //  app.SetDisplayAlerts(false);    // 不弹出对话框询问是否保存  
  128. //  app.Quit();                     // 退出  
  129.   
  130.     //释放对象    
  131.     range.ReleaseDispatch();  
  132.     sheet.ReleaseDispatch();  
  133.     sheets.ReleaseDispatch();  
  134.     book.ReleaseDispatch();  
  135.     books.ReleaseDispatch();  
  136.     app.ReleaseDispatch();  
  137.     books.close();
  138.     app.quit();
原创粉丝点击