VC操作Excel之基本操作

// 变量的定义

_Application app;
 Workbooks books;
 _Workbook book;
 Worksheets sheets;
 _Worksheet sheet;
 Range range;
 LPDISPATCH lpDisp;   
 COleVariant vResult;

CString str = "";
 
 COleVariant
  covTrue((short)TRUE),
  covFalse((short)FALSE),
  covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 
 //创建Excel 2003服务器(启动Excel)
 if (!app.CreateDispatch("Excel.Application",NULL))
 {
  AfxMessageBox("Create Excel service failure!");
  return;
 }

// 设置为FALSE时,后面的app.Quit();注释要打开
 // 否则EXCEL.EXE进程会一直存在,并且每操作一次就会多开一个进程
 app.SetVisible(TRUE);
 books.AttachDispatch(app.GetWorkbooks(),true);
 
 
 lpDisp = books.Open("E://test.xls",
  covOptional, covOptional, covOptional, covOptional,
  covOptional, covOptional, covOptional, covOptional,
  covOptional, covOptional, covOptional, covOptional,
  covOptional, covOptional);
 ASSERT(lpDisp);
 
 book.AttachDispatch(lpDisp);
 
 // 得到Worksheets 
 sheets.AttachDispatch(book.GetWorksheets(),true);
 
 // 得到Worksheet
 sheet.AttachDispatch(sheets.GetItem(_variant_t((short)(1))));  
 
 // 得到全部Cells
 range.AttachDispatch(sheet.GetCells(),true);

// 往单元格A1里写入字符串数据,就像操作矩阵一样,第1行第1列
 range.SetItem(_variant_t((LONG)1),_variant_t((LONG)1),_variant_t("hello word!"));

// 往单元格A2里写入时间数据
 range.AttachDispatch(sheet.GetRange(_variant_t("A2"), _variant_t("A2")),true);
 range.SetValue2(_variant_t("2011/02/15"));

// 往单元格A3~A6里写入浮点数据
 range.AttachDispatch(sheet.GetRange(_variant_t("A3"), _variant_t("A6")),true);
 range.SetValue2(_variant_t((double)3.14));

// 设置单元格的列宽为12
 range.AttachDispatch(sheet.GetRange(_variant_t("A1"), _variant_t("A1")),true);
 range.SetColumnWidth(_variant_t((long)12));

// 所有单元格居中显示
 range.AttachDispatch(sheet.GetCells(),true);
 range.SetHorizontalAlignment(_variant_t((long)-4108)); // -4108:居中,-4131:靠左,-4152:靠右
 range.SetVerticalAlignment(_variant_t((long)-4108)); // -4108:居中,-4160:靠上,-4107:靠下

// 读取单元格的数据,第4行第1列
 range.AttachDispatch(range.GetItem(_variant_t((long)(4)),_variant_t((long)(1))).pdispVal );
 vResult =range.GetValue(covOptional);
 
 switch (vResult.vt)
 {
 case VT_BSTR:  // 字符串
  str=vResult.bstrVal;
  break;
 case VT_R8:   // 8字节的数字
  str.Format("%f",vResult.dblVal);
  break;
 case VT_DATE:  // 时间格式
  SYSTEMTIME st;
  VariantTimeToSystemTime(vResult.date, &st);
  break;
 case VT_EMPTY:  // 单元格空的
  str="";
  break;
 }
 //MessageBox(str);

Font ft; // 要插入excel类库里面的Font类,下面类似
 
 range.AttachDispatch(sheet.GetRange(_variant_t("A3"), _variant_t("A5")),true);
 ft.AttachDispatch(range.GetFont());
 ft.SetName(_variant_t("华文行楷")); // 字体
 ft.SetSize(_variant_t((long)12)); // 字号
 //ft.SetColorIndex(_variant_t((long)3)); // 字的颜色: 红色
         ft.SetColor( _variant_t((long) RGB(255, 0, 0) ) );
 ft.SetBold(_variant_t((long)1)); // 1:粗体,0:非粗体

Interior it; // 底色设置
 
 range.AttachDispatch(sheet.GetRange(_variant_t("C3"), _variant_t("E6")),true);
 it.AttachDispatch(range.GetInterior());  
 it.SetColorIndex(_variant_t((long)20)); // 底色设置为浅青色

Borders borders; // 先设置区域内所有单元格的边框
 borders = range.GetBorders();
 borders.SetColorIndex(_variant_t((long)1));
 borders.SetLineStyle(_variant_t((long)1));
 borders.SetWeight(_variant_t((long)2));

// 然后设置外边框
 // LineStyle=线型(1~13) Weight=线宽 ColorIndex=线的颜色(-4105为自动, 1为黑色)
 range.BorderAround(_variant_t((long)9),_variant_t((long)1),_variant_t((long)1),vtMissing);

range.AttachDispatch(sheet.GetRange(_variant_t("C8"), _variant_t("D9")),true);
 // 合并单元格
 range.Merge(_variant_t((long)0));

book.Save();     // 保存Excel的内容
// app.SetDisplayAlerts(false); // 不弹出对话框询问是否保存
// app.Quit();      // 退出

//释放对象 
 range.ReleaseDispatch();
 sheet.ReleaseDispatch();
 sheets.ReleaseDispatch();
 book.ReleaseDispatch();
 books.ReleaseDispatch();
 app.ReleaseDispatch();

VC操作Excel之基本操作

时间: 2024-10-11 06:22:22

VC操作Excel之基本操作的相关文章

VC操作excel

http://www.cnblogs.com/witxjp/archive/2010/06/05/1752181.html 最近在做个数据库程序,因为有些数据用户要求导出到Excel文件显示(需要报给其他单位).所以查阅了一下相关的VC的Excel编程操作,总结一下吧:(所有资料来源于网络) 利用VC操作Excel的方法至少有两种 1 .利用ODBC把Excel文件当成数据库文件,来进行读.写.修改等操作,网上有人编写了CSpreadSheet类,提供支持. 2. 利用Automation(OL

VC++操作Excel

摘要:使用Microsoft Office所带的控件来实现代码操作excel表格. 开发环境:操作系统是Microsoft Windows7 32bit,Office办公套装是Microsoft Office 2003,编程环境是Microsoft Visual Studio 6.0. 使用背景:我最近有个项目中要生成报表,是将数据库中的发证数据查询出来导出到Excel表格中以便打印,所以上网找了这方面的内容,具体内容如下,如错误还请指证. 从平常我们操作一般文件上来看,无非是打开文件,操作文件

关于VC操作Excel无法退出进程的问题

网上查了很久都没有个结果,有相同问题倒是不少,都是没有解决的,有的是用结束进程方式解决的.虽然我也没有彻底解决,但是可能可以帮到碰到相同问题的朋友,在线程内的操作excel都没有问题,线程执行完成进程也就退出了,当然在线程内得加上::CoInitialize(NULL),::CoUninitialize()来初始化线程COM库,如果不是线程的话怎么办呢?比如按钮事件内,碰到的问题就是在这种情况下点击一次excel进程就会多一个,事件执行结束进程也不会退出.我采取的办法是在WM_CLOSE消息的地

[00028]-[2015-09-23]-[00]-[VC 关于Excel操作的测试]

BOOL CTest_App::InitInstance() { ....... // 初始化Con支持库 if(ConInitialize(NULL) != 0) { AfxMessageBox("初始化COn支持库失败!"); exit(1); } ......... } class CTest_Dlg { // 定义相关全局变量 _Application app; Workbooks books; _Workbook book; Worksheets sheets; _Works

VC通过OLE/COM对象操作EXCEL

vc通过excel的COM接口来操作EXCEL时,功能比较强大,可以对EXCEL进行表格的几乎所有操作,在操作时如果利用SAFEARRAY数组,性能也会大幅度提升. 但是有一个问题,在操作完EXCEL后,资源释放以后,EXCEL进程怎么也关不掉!!!我尝试了很多种办法,都无效,最后无意间发现导致EXCEL进程不能关闭的原因是,EXCEL中加载了第三方的COM组件(我的是金山杀毒的EXCEL加载项引起的),查找EXCEL加载项的方法是(excel2010版本): 点击[文件]---[选项]---[

VC——使用DLL的方式操作excel

写工具软件,一直和excel打交道,之前一直采用excel.cpp.excel.h直接添加到工程的方式来读写excel,现在由于要对代码进行单元测试,excel.cpp和excel.h文件中竟然有上万行代码,会引起很大的测试量,因此打算采用dll调用的方式来读写excel. 1. 首先从本机安装的office软件中导出DLL文件. 在程序的的stdafx.h中增加以下内容.文件路径修改为本机安装office的路径 #import "C:\\Program Files (x86)\\Common

C#项目中操作Excel文件——使用NPOI库

转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包含数据记录.分析.汇总功能模块的项目.常用的操作Excel文件的方法主要有三个: 1. OleDb: 这种方式是把整个Excel文件当做一个数据源来进行数据的读取操作. 优点:实现方式简单,读取速度快: 缺点:读取Excel数据的过程不太灵活,对内存的占用比较高,当数据量变的很大时,容易由于内存空间

使用EPPLUS操作EXcel

使用EPPLUS操作EXcel 时间 2014-11-06 19:28:01  姜糖水 原文  http://www.cnphp6.com/archives/58648 主题 Excel 1 下载Epplus最新版: http://epplus.codeplex.com/ 2 在项目中添加引用 EEPULS.dll(测试环境Win7+V2010旗舰) 3  添加using引用 using OfficeOpenXml; using OfficeOpenXml.Drawing; using Offi

VC+++ 操作word

最近完成了一个使用VC++ 操作word生成扫描报告的功能,在这里将过程记录下来,开发环境为visual studio 2008 导入接口 首先在创建的MFC项目中引入word相关组件 右键点击 项目 --> 添加 --> 新类,在弹出的对话框中选择Typelib中的MFC类. 然后在弹出的对话框中选择文件,从文件中导入MSWORD.OLB组件. 这个文件的路径一般在C:\Program Files (x86)\Microsoft Office\Office14 中,注意:最后一层可能不一定是