MFC向Excel读写数据详细方法
更新时间:2023-10-16 11:23:01 阅读量: 综合文库 文档下载
- vba读写excel数据推荐度:
- 相关推荐
MFC读写Excel详细步骤
准备工作:
打开开发环境VC或VS新建一个基于对话框的简单工程; 通过类向导添加类-->类型库中的MFC类
打开创建类对话框
选择文件,位置编辑框填入Excel.exe的详细目录,可以通过浏览选择,在接口下方选择_Application(应用),_Workbook(视窗),Workbooks(整个视窗),Worksheets(单个表单),Worksheets(整个表单),Range(元素集合)六个基本的接口并生成类。选择接口后单击向右的单箭头即可,双箭头是生成所有接口的类; 生成类之后将添加的几个类的头文件中的
#import \注释掉,加上#include。
然后编译,出现下面这俩个错误;点击DialodBoxA找到错误位置将DialodBox改为_DialodBox;再编译,没有错误; warning C4003: “DialogBoxA”宏的实参不足 error C2059: 语法错误:“,”
在要操作Excel类的CPP文件中包含头文件:
准备工作完成。 向Excel写数据:
CFileDialogdlg(FALSE, \,NULL,
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,\
Files(*.xls)|*.xls|Microsoft Excel Files(*.xlsx)(推荐)|*.xlsx|All Files (*.*)|*.*||\);
CRange range; CMyFont font; CRange cols;
COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); if (!app.CreateDispatch(\)) { }
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(\),COleVariant(\)); //设置公式“=RAND()*100000”
range.put_Formula(COleVariant(\));
this->MessageBox(\无法创建Excel应用!\); return;
dlg.m_ofn.lpstrTitle =\保存到Excel\; if (dlg.DoModal() == IDOK) {
//获取路径
CStringstrFileName=dlg.GetPathName();
CWorkbooks books; CWorkbook book; CApplication app; CWorksheets sheets; CWorksheet sheet;
//选择整列,并设置宽度为自适应 cols = range.get_EntireColumn(); cols.AutoFit(); //设置字体为粗体
font = range.get_Font();
font.put_Bold(COleVariant((short)TRUE)); //设置数字格式为货币型
//range.put_NumberFormat(COleVariant(\ CString Range327[]={\,\,\,\,\,\};
CStringfileinfo[]={\齿形\,\齿向\,\齿距\,\左齿面\,\右齿面\,\径跳\}; for(int i=0;i<6;i++) { } /*
//获得坐标为(C,2)单元格 //显示Excel表
range = sheet.get_Range(COleVariant(\ //设置单元格内容位Hello Excel
range.put_Value2(COleVariant(\哈尔滨精达测量仪器有限公司\ */
//选择整列,并设置宽度为自适应 cols = range.get_EntireColumn(); cols.AutoFit();
range = sheet.get_Range(COleVariant(Range327[i]), range.put_Value2(COleVariant(fileinfo[i]));
COleVariant(Range327[i]));
//显示列表控件
range.ReleaseDispatch();
font.ReleaseDispatch(); cols.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch();
//以下关闭应用的两条代码结合使用且顺序不能反,否则无法关闭进程 app.Quit();
app.ReleaseDispatch();
book.SaveCopyAs(COleVariant(strFileName)); book.put_Saved(true);
//app.put_Visible(TRUE);
//允许其他用户控制Excel,否则Excel、将一闪而过 //app.put_UserControl(TRUE);
}
读取Excel中的数据:
UpdateData(TRUE); str327=\;
UpdateData(FALSE); CApplication app; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CRangeoCurCell;
CString strFileName1;
CFileDialogdlg(TRUE, \,NULL,
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,\
Files(*.xls)|*.xls|Microsoft Excel Files(*.xlsx)|*.xlsx|All Files (*.*)|*.*||\);
dlg.m_ofn.lpstrTitle = \打开Excel文件\ ; intnRetVal = dlg.DoModal(); if ( nRetVal == IDOK ) {
if (!app.CreateDispatch( _T( \ ), NULL ) ) { }
//设置为显示
app.put_Visible(FALSE);
books.AttachDispatch(app.get_Workbooks(), TRUE ); LPDISPATCHlpDisp = NULL;
COleVariantcovTrue((short)TRUE); COleVariantcovFalse((short)FALSE);
COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// 打开文件
CStringstrFilePath=dlg.GetPathName(); strFileName1=strFilePath;
//CStringstrFilePath=\研发人员名单2016.xls\ lpDisp = books.Open( strFilePath,
_variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing),
::MessageBox( NULL, _T( \创建Excel服务失败!\ ), _T( \错误提示!\ ), MB_OK | return; //exit(1);
MB_ICONERROR);
_variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing) );
// 获得活动的WorkBook( 工作簿 ) book.AttachDispatch(lpDisp, TRUE ); // 获得活动的WorkSheet( 工作表 )
sheet.AttachDispatch(book.get_ActiveSheet(), TRUE ); // 获得使用的区域Range( 区域 )
range.AttachDispatch(sheet.get_UsedRange(), TRUE ); // 获得使用的行数 longlgUsedRowNum = 0;
range.AttachDispatch(range.get_Rows(), TRUE ); lgUsedRowNum = range.get_Count(); // 获得使用的列数 longlgUsedColumnNum = 0;
range.AttachDispatch(range.get_Columns(), TRUE ); lgUsedColumnNum = range.get_Count(); // 读取Sheet的名称
CStringstrSheetName = sheet.get_Name(); //得到全部Cells,此时,CurrRange是cells的集合 range.AttachDispatch(sheet.get_Cells(), TRUE ); // 遍历整个Excel表格 CStringArray* arrayStr;
arrayStr = newCStringArray[lgUsedRowNum]; for ( int i = 0; i for ( int j = 1; j <= lgUsedColumnNum; )//遍历列 { oCurCell.AttachDispatch( range.get_Item( COleVariant( (long)(i + 1)), VARIANTvarItemName = oCurCell.get_Text(); CStringstrItemName; COleVariant( (long)j ) ).pdispVal, TRUE ); strItemName = varItemName.bstrVal; AfxMessageBox(strItemName ); // 判断是否是合并的单元格 VARIANTvarMerge = oCurCell.get_MergeCells(); CString // PosInfo1[]={\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\}; CString PosInfo2[]={\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\}; } if(lgUsedColumnNum*lgUsedRowNum>=300) { } CStringstrTempValue[20][20]; for ( int i = 0; i // 释放二维数组 delete[] arrayStr; for (int j = 0; j strTempValue[i][j]=arrayStr[j].GetAt(i); MessageBox(\文件过大,存储空间不足,无法读取!\); goto LLL; } i++; if ( varMerge.boolVal == -1 ) { } else if ( varMerge.boolVal == 0 ) { } arrayStr[i].Add( strItemName ); j++; AfxMessageBox( _T( \不是合并的单元格!\ AfxMessageBox( PosInfo1[j-1]+PosInfo2[i]+\是合并的单元格!\ ); // // // // /**********************************************************************************//这里设置了字符串类型,应该还能设置其它类型参数,比如说整型。解开上面代码中的注释, ******************/ 可以尝试下其它功能。参考资源[1] //释放资源 book.SaveCopyAs(COleVariant(strFilePath)); book.put_Saved(true); book.ReleaseDispatch(); books.ReleaseDispatch(); app.Quit(); app.ReleaseDispatch(); long size327=lgUsedColumnNum*lgUsedRowNum; datafloat=atof(strTempValue[0][0]); UpdateData(TRUE); for ( int i = 0; i m_ddd=datafloat; UpdateData(FALSE); if (i!=0) { } for (int j = 0; j if (!strTempValue[i][j].IsEmpty()) { } str327=str327+\+strTempValue[i][j]; str327=str327+\; // // //将对应Excel进程关闭 range.ReleaseDispatch(); oCurCell.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); } /*******************资源释放***********************/ //book.SaveCopyAs(COleVariant(strFileName1)); //book.put_Saved(true); //不显示任何警告对话框 app.put_AlertBeforeOverwriting(false); app.put_DisplayAlerts(false); LLL: //在保存文件代码之前加上下面两句语句 //以下关闭应用的两条代码结合使用且顺序不能反,否则无法关闭进程 app.ReleaseDispatch(); app.Quit();
正在阅读:
MFC向Excel读写数据详细方法10-16
精英循环理论10-11
人生感悟文章摘抄11-20
六年级下语文第四单元测试卷及答案05-26
14个最迷惑人的癌症前兆04-07
农民工花名册及工资表模板05-26
瑞文标准推理测验(修订版) - 大图04-25
人教版八年级数学上册 11.1 与三角形有关的线段 同步练习题(Wor04-29
现代汉语名词解释09-01
房屋建筑外墙外保温施工质量管理12-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 读写
- 方法
- 数据
- 详细
- Excel
- MFC
- 实验五 种群数量的状态转移 - 微分方程(数学建模)
- 论创新理论的产生及其发展-精选模板
- 矩形铜排铜载流量选择一览表
- 石膏砌块技术交底 - 图文
- 实验二 PHP基础(2)
- MATLAB教程2012a第6章习题解答-张志涌
- 抗体多样性的遗传学原理
- 年产500万平方米太阳能光伏玻璃生产项目可行性研究报告
- 经济法论文(消费者权益篇)
- 五年级上册海西乐园教案(全册)
- 当代青年逆商水平现状的调查与分析
- 教职工创优工作方案-精选范文
- 《为人民服务》教学设计
- 开展大学生当村官助理暑期社会实践,服务乐清市镇安乡 - 图文
- 《士兵突击》教案
- se运营管理-54 企业S&OP政策
- 电子称--单片机制作
- 双控开关接线图 最全!含电路图原理和接法
- 14级能动学院2015-2016学年奖学金汇总表(确定版)
- 财政与金融复习资料及试题及答案