vs2010写入EXCEL数据(二)

本文详细介绍了如何使用Visual Studio 2010的MFC框架进行Excel自动化操作,包括数据写入、公式设置、格式调整及图片插入等高级功能。通过创建DLG并加载MFC类,实现对Excel工作簿、工作表、范围、字体、背景颜色等元素的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#vs2010写入EXCEL数据(二)
可以更改数据,插入公式,编辑背景颜色,控制格式等
1.2007版本的EXCEL
2.VS2010使用MFC
3.新建一个DLG后,加载各个.h文文件。具体步骤:在vs2010中 项目->添加类->TypeLIb中的MFC类->点击添加->在弹出来的对话框中,选择从以下来源添加类,选注册表->可用的类型库中找到Microsoft Excel 12.0 Object Library<1.6>(位置:C:\Program Files\Microsoft Office\OFFICE12\EXECEL.EXE)
4.选择需要的接口进行添加:_Application, _Workbook, _Worksheet, Font,Range,Shapes,Sheets,Interior,window,生成对应的CApplication.h,CWorkbook.h,CWorksheet.h,CFont0.h,CRange.h,CShapes,CSheets,Cnterior,CWindow0.h.
5.在创建的DlgGexcelDlg.h中,将这些.h Include进去,
eg:#include “CRange.h”
#include “CWorkbook.h”
#include “CWorkbooks.h”
#include “CWorksheet.h”
#include “CWorksheets.h”
#include “CApplication.h”
#include “CFont0.h”
#include “CShapes.h”
//#include “CShape.h”
#include “CShapeRange.h”
#include “Cnterior.h”
#include “CWindow0.h”
6.通过编译会进行报错:CRange.h中的 VARIANT DialogBox()报错
处理方法:在报错的地方将:VARIANT DialogBox()改为VARIANT _DialogBox();
7.编译通过后可进行操作即可

以下添加一些常用操作:
CWorkbooks books;
CWorkbook book;
CApplication app;
CWorksheets sheets;
CWorksheet sheet;
CRange range,rgBMP;
CRange cols;
CFont0 font;
Cnterior bkClr;
CWindow0 wndFroze;
COleVariant covOptional((long) DISP_E_PARAMNOTFOUND,VT_ERROR);
if (!app.CreateDispatch(“Excel.Application”))
{
this->MessageBox(“无法创建应用”);
return;
}
//获取工作薄集合
books=app.get_Workbooks();
// 添加一个工作薄
book=books.Add(covOptional);
//获取工作表集合
sheets= book.get_Worksheets();
//获取第一个工作表
sheet = sheets.get_Item(COleVariant ((short)1));
//选择工作表中(A1,1)(B,1)单元格区域
range = sheet.get_Range(COleVariant(“A1”),COleVariant(“A1”));
//公式设置"=RAND()*100000"
range.put_Formula(COleVariant("=RAND()*1000"));
//选择整列,并设置宽度为自适应
cols =range.get_EntireColumn();
cols.AutoFit();
//设置 字体为 粗体
font = range.get_Font();
font.put_Bold(COleVariant((short)TRUE));
//设置数字格式为货币型
//range.put_NumberFormat(COleVariant("$0.00"));
CString Range327[]={“C1”,“C2”,“C3”,“C4”,“C5”,“C6”};
CString fileinfo[]={“齿形”,“齿向”,“齿距”,“左齿面”,“右齿面”,“径跳”};
for (int i=0;i<6;i++){
range = sheet.get_Range(COleVariant(Range327[i]),COleVariant(Range327[i]));
range.put_Value2(COleVariant(fileinfo[i]));
}
////从Sheet对象上获得一个Shapes
//Shapes shapes = sheet.get_Shapes();
////获得Range对象,来插入图片
//range= sheet.get_Range(COleVariant(“D16”),COleVariant(“J22”));
//rgBMP=range;
////从本地添加一个图片
//shapes.AddPicture(“D:\Test.jpg”,false,true,(float)range.get_Left().dblVal,(float)range.get_Top().dblVal,(float)range.get_Width().dblVal,(float)range.get_Height().dblVal);
////设置宽高
//ShapeRange sRange=shapes.GetRange(_variant_t(long(1)));

		//sRange.SetHeight(float(30));
		//sRange.SetWidth(float(30));

		//选择整列,设置宽度自适应
		cols = range.get_EntireColumn();
		cols.AutoFit();
		//显示列表控件
		app.put_Visible(TRUE);
		//允许其他用户控制EXCEL,否则EXCEL将一闪而过
		//app.put_UserControl(TRUE);
		book.SaveCopyAs(COleVariant(strFileName));
		book.put_Saved(true);
		

		//--修改EXCEL单元格
		//range= sheet.get_Range(COleVariant())
		//--
		LPDISPATCH lpDisp;
		//-打开文件
		lpDisp = books.Open(strFileName,
			                covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,
							covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional
							);
		//得到的视图workbook
		book.AttachDispatch(lpDisp);
		//得到workssheet
		sheets.AttachDispatch(book.get_Worksheets());
		//得到sheet
		lpDisp =book.get_ActiveSheet();
		sheet.AttachDispatch(lpDisp);
		//获取用户区
		CRange userRange;
		userRange.AttachDispatch(sheet.get_UsedRange());
		//得到用户区的行数
		range.AttachDispatch(userRange.get_Rows());
		long rowNum = range.get_Count();
		//得到用户去列数
		range.AttachDispatch(userRange.get_Columns());
		long colNum =  range.get_Count();
		//WinExec(strFileName,SW_SHOW);
		//ShellExecute(0&,NULL,strFileName,NULL,NULL,NULL);
	
		//得到用户区的开始行和开始列
		//--设置底色
		bkClr.AttachDispatch(range.get_Interior());
		bkClr.put_ColorIndex(_variant_t((long)11));//标题底色 _variant_t((long)11)
		////表格内容的底色
		range.AttachDispatch(sheet.get_Range(COleVariant("C1"),COleVariant("C3")));
		bkClr.AttachDispatch(range.get_Interior());
		bkClr.put_ColorIndex(_variant_t((long)11));//标题底色

		////--冻结窗口
		wndFroze.AttachDispatch(app.get_ActiveWindow());
		wndFroze.put_SplitRow(_variant_t((long)1));//冻结第一行
		wndFroze.put_FreezePanes(TRUE);

		//将对应Excel进程关闭
		range.ReleaseDispatch();
		sheet.ReleaseDispatch();
		sheets.ReleaseDispatch();
		book.ReleaseDispatch();
		books.ReleaseDispatch();
		//以下关闭应用的两条代码结合使用且顺序不能反,否则无法关闭进程
		app.Quit();
		app.ReleaseDispatch();

参考:1。https://wenku.baidu.com/view/aece6e42f4335a8102d276a20029bd64793e6254.html
2。https://www.docin.com/p-1499229107.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值