【关于MFC操作Excel表格的一些经验】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bigtree_mfc/article/details/40625619

前段时间花个两个星期做了两个和excel表格有关的软件,所以在这里记录下一些经验:

操作excel表格主要两种方法:

一、使用SpreadSheet类操作:


在前面加一个文件打开的函数;dlg。

fileName  = dlg.GetPathName();//文件名
CSpreadSheet SS(fileName,"工作表名称");
SS.GetTotalRows(); //相应工作表横数(不认行只认最远)
SS.GetTontalRows();//最大列?
SS.ReadRow(Rows, i);
Rows.GetAt(j); //工作表名称的第i行第j列数据



二、使用excel.exe中自带的类操作:

1、导入类库

首先需要电脑上安装有办公软件,菜单查看->建立类向导->Add Class...\From a type Library...->选择excel.exe的地址(不知道的在开始菜单中搜索excel.exe)

PS:注意事项第3点


2、

excel .exe中需要的类:
_Application
_Workbook
_Worksheet
Font//字体
Interior//背景色
Range
Workbooks
Worksheets


注意:

初始化函数中添加
::CoInitialize(NULL);//初始化


_Application app;  //先创建一个_Application类,用_Application来创建一个Excel应用程序接口
Workbooks books;   //工作薄集合
_Workbook book;    //工作薄
Worksheets sheets; //工作表集合
_Worksheet sheet;  //工作表
Range range;       //单元格区域对象
Font font;//字体  
Range cols; 



//covOptional 可选参数的VARIANT类型
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 


1、获取区域、
range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
range.AttachDispatch(sheet.GetUsedRange());//当前区域
2、合并单元格:
range.SetHorizontalAlignment(COleVariant((short)3));//1合并靠右,2合并靠左,3合并居中
range.Merge(COleVariant((short)0));//不选择就没有合并
range.SetValue2(COleVariant("123"));
3、设置列宽
range.SetColumnWidth(COleVariant("18.75"));
range.SetRowHeight(COleVariant("22"));//行高
4、设置自动换行
range.SetWrapText(COleVariant((long)1));
5、顶端对齐
range.SetVerticalAlignment(COleVariant((short)-4160));
6、设置字体
range = sheet.GetRange(COleVariant("A3"),COleVariant("P3"));
font= range.GetFont();
font.AttachDispatch(range.GetFont());
font.SetName(COleVariant("宋体"));
font.SetSize(COleVariant((short)9));
font.SetBold(COleVariant((short)TRUE));//粗体
7、设置自动适应宽度
cols = range.GetEntireColumn();
cols.AutoFit(); 
8、设置为文本格式
range.SetNumberFormat(COleVariant("@"));  
9、插入一个公式
//选择A2单元格,插入一个公式"=RAND()*100000",
range=sheet.GetRange(COleVariant("A2"),COleVariant("A2"));  
range.SetFormula(COleVariant("=RAND()*100000")); 
10、画边线
range.BorderAround(COleVariant((long)1),(long)2,(long)1,covOptional);//covOptional见最上
11、单元格背景颜色
Interior it; // 底色设置
range.AttachDispatch(sheet.GetRange(_variant_t("C3"), _variant_t("E6")),true);
it.AttachDispatch(range.GetInterior());
it.SetColorIndex(_variant_t((long)20)); // 底色设置为浅青色


注意事项:

1、本人在操作excel表格时,遇到一种类型是无法操作的,就是合并后的单元格。不管是自动换行、自动适应宽度等等,都无法操作。本人无法用vc搞定这个问题

2、关于文本格式,有两种一种就是单纯的文本格式,还一种是左上角带三角形的文本格式,主要是因为SpreadSheet类有时候读取不了单纯的文本格式内容,只能读取带三角形的文本格式。这个问题通过“数据“菜单中的子菜单”分列“进行操作,先选择一列,再操作,本人无法用vc搞定这个问题。


一种解决办法:在excel表格中录制宏再操作excel表格,查看宏内容,宏是以VB语言写成,通过这个可以找到用vc操作excel的方法。

3、不同的excel.exe只能操作相同系列的表格,比如xls(97-2003)和xlsx(2007)是两种不同的exe操作,使用03只能操作xls不能操作xlsx

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页