【前言】工作或学习中可能需要实现基于VC读\写Excel文件的功能,本人最近也遇到了该问题。
中间虽经波折,但是最终还是找到了解决问题的办法。
在此跟大家分享,希望对跟我同样迷茫过的同学们有所帮助。
1、程序功能1)打开一个excel文件;2)显示到CListCtrl上;3)新建一个Excel文件。
以上均在对话框中实现。
2、平台VC++20103、实现方法常用的Excel打开方式有两种1)通过数据库打开;2)OLE方式打开。
由于方式1)操作繁琐,经常出现莫名的错误,这里选用方式2).4、准备步骤首先新建一个Dialog窗体程序,添加listcontrol和两个按钮1)将ExcelLib文件夹拷贝到程序目录下;
2)将Export2Excel.h,Export2Excel.cpp两个文件添加到项目;
3)包含头文件,#include"ExcelLib/Export2Excel.h"通过以上步骤在程序中引入了可以读取Excle文件的CExport2Excel类;
5、打开excel文件通过按钮点击打开voidCExcelTestDlg::OnBnClickedButtonOpenExcel(){//获取文件路径CFileDialog*lpszOpenFile;CStringszGetName;lpszOpenFile=newCFileDialog(TRUE,"","",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,"ExcelFile(*.xlsx;*.xls)|*.xls;*.xlsx",NULL);if(lpszOpenFile->DoModal()==IDOK){szGetName=lpszOpenFile->GetPathName();SetWindowText(szGetName);deletelpszOpenFile;}elsereturn;//打开文件//文件中包含多个sheet时,默认打开第一个sheetCExport2ExcelExcel_example;Excel_example.OpenExcel(szGetName);//获取sheet个数intiSheetNum=Excel_example.GetSheetsNumber();//获取已使用表格行列数intiRows=Excel_example.GetRowCount();intiCols=Excel_example.GetColCount();//获取单元格的内容CStringcs_temp=Excel_example.GetText(1,1);//AfxMessageBox(cs_temp);//Listcontrol上显示//获取工作表列名(第一行)CStringArraym_HeadName;m_HeadName.Add(_T("ID"));for(inti=1;iGetItemCount()>0){m_list.DeleteColumn(0);}//初始化ClistCtrl,加入列名InitList(m_list,m_HeadName);//填入内容//第一行是标题,所以从第2行开始CStringnum;intpos;for(introw=2;row<=iRows;row++){pos=m_list.GetItemCount();num.Format(_T("%d"),pos+1);m_list.InsertItem(pos,num);for(intcolum=1;colum<=iCols;colum++){//插入均从序号0开始m_list.SetItemText(pos,colum,Excel_e
2025/11/15 14:25:49 281KB VC++ Excel OLE VS2010
1
多级反馈队列调度算法实现含:操作系统课程设计报告.doc多级反馈队列调度算法.cpp多级反馈队列调度算法又称反馈循环队列或多队列策略,主要思想是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列,较高优先级的队列一般分配给较短的时间片。
处理器调度先从高级就绪进程队列中选取可占有处理器的进程,只有在选不到时,才从较低级的就绪进程队列中选取。
使用这种调度策略具有较好的性能,能够满足各类用户的需要。
1
学生,一种很常见的题台阶问题,可以有一些启示
2025/10/31 2:54:56 290B C++
1
学生,相比网上的更简化
2025/10/26 15:25:04 987B c++
1
用c++模拟直线插补和圆弧插补实例二http://blog.csdn.net/z893345329/article/details/25922857
2025/10/18 21:27:28 8KB c++ 模拟 直线插补 圆弧插补
1
使用适用于STM32F407uC的不同框架的TinyML警告:由于库包含在.gitignore中,因此必须为每个项目都生成CubeMX代码。
对于TFLite项目,必须将自动生成的main更改为.cpp,并且必须将其与main.c.中的最新更改合并。
开发IDE:KeiluVisionv6多维数据集MXAI/003MagicWand在CubeMXAI\003MagicWand\Middlewares\Third_Party\MachineLearning\edgeimpulse\model-parameters\model_metadata.h中修改以下参数:#defineEI_CLASSIFIER_RAW_SAMPLE_COUNT200#defineEI_CLASSIFIER_INTERVAL_MS10#defineEI_
2025/10/15 21:55:14 13.25MB c cpp tensorflow stm32
1
Turbo编译码程序c、c++,包含编码、译码两个.cpp,可以在VS中Linux下加入工程中使用,也可以加在Matlab中使用
2025/10/14 21:28:04 11KB Turbo 编译码 C C++
1
具体题目在我的博文当中
2025/10/13 15:06:34 366B 数据结构 c++ c语言 算法
1
编译原理的第二个实验,赋值语句的翻译程序设计,包括词法分析,文件输出存盘,含有.cpp.dsw.txt输出文件等等
2025/10/9 11:31:16 940KB 赋值语句的翻译程序设计
1
c++开发百度地图api时所需的WebPage.h和WebPage.cpp文件,下载解压导入项目即可。
2025/10/8 16:07:08 3KB WebPage 百度地图api
1
共 412 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡