MFC向Excel读写数据详细方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC读写Excel详细步骤
准备工作:
打开开发环境VC或VS新建一个基于对话框的简单工程;通过类向导添加类-->类型库中的MFC类
打开创建类对话框
选择文件,位置编辑框填入Excel.exe的详细目录,可以通过浏览选择,在接口下方选择_Application(应用),_Workbook(视窗),Workbooks(整个视窗),Worksheets(单个表单),Worksheets(整个表单),Range(元素集合)六个基本的接口并生成类。选择接口后单击向右的单箭头即可,双箭头是生成所有接口的类;
生成类之后将添加的几个类的头文件中的
#import "E:\\Microsoft Office\\Office14\\EXCEL.EXE" no_namespace
注释掉,加上#include
然后编译,出现下面这俩个错误;点击DialodBoxA找到错误位置将DialodBox改为_DialodBox;再编译,没有错误;
warning C4003: “DialogBoxA”宏的实参不足
error C2059: 语法错误:“,”
在要操作Excel类的CPP文件中包含头文件:
准备工作完成。
向Excel写数据:
CFileDialog dlg(FALSE, ".xlsx",NULL,
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Microsoft Excel
Files(*.xls)|*.xls|Microsoft Excel Files(*.xlsx)(推荐)|*.xlsx|All Files (*.*)|*.*||");
dlg.m_ofn.lpstrTitle ="保存到Excel";
if (dlg.DoModal() == IDOK)
{
//获取路径
CString strFileName=dlg.GetPathName();
CWorkbooks books;
CWorkbook book;
CApplication app;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
CMyFont font;
CRange cols;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if (!app.CreateDispatch("Excel.Application"))
{
this->MessageBox("无法创建Excel应用!");
return;
}
books=app.get_Workbooks();
book=books.Add(covOptional);
sheets=book.get_Worksheets();
sheet=sheets.get_Item(COleVariant((short)1));
//获得(A,1)(B,1)两个单元格
range=sheet.get_Range(COleVariant("A1"),COleVariant("B6"));
//设置公式“=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]));
}
/*
//获得坐标为(C,2)单元格 //显示Excel表
range = sheet.get_Range(COleVariant("C1"), COleVariant("F10"));
//设置单元格内容位Hello Excel
range.put_Value2(COleVariant("哈尔滨精达测量仪器有限公司"));
*/
//选择整列,并设置宽度为自适应
cols = range.get_EntireColumn();
cols.AutoFit();
//显示列表控件
//app.put_Visible(TRUE);
//允许其他用户控制Excel,否则Excel、将一闪而过
//app.put_UserControl(TRUE);
book.SaveCopyAs(COleVariant(strFileName));
book.put_Saved(true);
range.ReleaseDispatch();
font.ReleaseDispatch();
cols.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
//以下关闭应用的两条代码结合使用且顺序不能反,否则无法关闭进程
app.Quit();
app.ReleaseDispatch();