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之基本操作的更多相关文章
- VC操作Excel之基本操作(颜色等)【转载】
文章出处https://blog.csdn.net/form88/article/details/78566390 EXCEL里如何知道某种颜色的ColorIndex的值 ===fag::====== ...
- VC操作excel
http://www.cnblogs.com/witxjp/archive/2010/06/05/1752181.html 最近在做个数据库程序,因为有些数据用户要求导出到Excel文件显示(需要 ...
- POI操作Excel
POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...
- VC++ operate excel
利用VC操作Excel的方法至少有两种 1 .利用ODBC把Excel文件当成数据库文件,来进行读.写.修改等操作,网上有人编写了CSpreadSheet类,提供支持. 2. 利用Automation ...
- JXL操作Excel
jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文 ...
- 使用EPPLUS操作EXcel
使用EPPLUS操作EXcel 时间 2014-11-06 19:28:01 姜糖水 原文 http://www.cnphp6.com/archives/58648 主题 Excel 1 下载Ep ...
- VS2010 C++ 操作Excel表格的编程实现
转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...
- 在 VS2008 下操作 Excel 的方法总结
这些天做个软件,需要读取 Excel 并导入到数据库中,所以研究了一下在 VC 下操作 Excel 的方法,这里做个总结,以作备忘. 一.最常用的 OLE 自动化方式 这个方式应该说是功能最全的方 ...
- C# 操作Excel (二)
根据翻阅LTP.Net知识库系列之四中Office操作功能: 一.记录常用如下 (1)“在自己的程序中宿主Office”的意思就是在我们自己开发的应用程序的窗体上,显示一个就像Office应用程序那样 ...
随机推荐
- Spark生态之Spark Core
- ios页面传值的几种方法
1.属性2.方法3.代理方法4.SharedApplication5.NSUserdefault6.通过一个单例的class来传递 属性这种方法传值挺方便的,只需要拿到它的指针,如果重新声明一个指针, ...
- Umbraco中的Examine Search功能讲解
转载原地址: http://24days.in/umbraco/2013/getting-started-with-examine/ Everytime I read the word Examine ...
- UVaLive 6625 Diagrams & Tableaux (状压DP 或者 DFS暴力)
题意:给一个的格子图,有 n 行单元格,每行有a[i]个格子,要求往格子中填1~m的数字,要求每个数字大于等于左边的数字,大于上边的数字,问有多少种填充方法. 析:感觉像个DP,但是不会啊...就想暴 ...
- web.xml文件中配置ShallowEtagHeaderFilter需注意的问题
问题现象及解决方法 今天在Spring MVC应用中加入ShallowEtagHeaderFilter时,发现返回的响应中没有etag头,上网查了很多相关资料,也试了很多方法依然不起作用.在查看web ...
- window.showModalDialog基础
本文转载:http://www.cnblogs.com/sunnycoder/archive/2010/05/05/1728047.html 基本知识 l showModalDialog() (IE ...
- GMT、UTC、PDT 时间是什么?Linux下如何调整时区
今天碰到一个时区配置问题,如果服务器时区配置不对,很可能在使用date相关函数时会出现莫名其妙的错误,现将相关时区说明及LINUX下调整时区方法记录如下,以做备忘. GMT GMT 是 Gree ...
- too many automatic redirections were attempted
用HttpClient时发现一下页面跳转现象. 页面A要求授权自动跳转到页面B, 页面B进行了授权,在HTTP Header里要求SetCookie并跳转到页面A. 再次请求页面A的时候没有带上此Co ...
- Hash Table构建
get-item e:\test\* |format-table @{name="aa";expression={$_.name.tostring().split(".& ...
- VHD_Update_mount-vhd
###################功能说明########################该脚本用来对离线VHD文件更新,导入系统补丁############################### ...