#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