当前位置: 首页 > news >正文

MFC中使用EXCEL的方法之一

1、导入EXCEL控件

打开类向导,添加类型库中的MFC类

选择文件来源,打开EXCEL.EXE所在的文件路径

然后添加如下图所示的几个类,这几个类可以满足基本的读写

然后把新添加的这几个类中头文件中的 #import注释掉

当引用头文件准备使用时,会发现有个错误,此时在DialogBox()前增加一个下划线,变成VARIANT _DialogBox() 就可以正常使用了

2、初始化Ole环境

在程序初始化之后调用AfxOleInit();

在程序关闭之前调用AfxOleTerm();

3、调用

初始化EXCEL调用环境

CApplication excelApp;
//启动Excel
if (!excelApp.CreateDispatch(_T("Excel.Application"), NULL))
{AfxMessageBox(_T("启动Excel失败!"));return FALSE;
}

获取工作簿和sheet页(EXCEL已经存在)

    CWorkbook book;CWorkbooks books;CWorksheets sheets;CWorksheet sheet;// 解析EXCELCOleVariantcovTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);books.AttachDispatch(excelApp.get_Workbooks(), TRUE);book = books.Open(strExcelPath, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional);sheets = book.get_Worksheets();//获取第一个工作表sheet = sheets.get_Item(COleVariant((short)1));

创建一个新的工作簿

CWorkbook bookNew = books.Add(covOptional);

对EXCEL的数据进行操作

CRange usedRange;usedRange.AttachDispatch(sheet.get_Cells(), TRUE);// 或者如下(AttachDispatch和等于是两种不同的使用方式)
usedRange = sheet.get_UsedRange();// 获取某个单元格,i,j从1开始
usedRange.AttachDispatch(usedRange.get_Item(COleVariant(long(i)), COleVariant(long(j))).pdispVal, TRUE);// 或者如下
usedRange= usedRange.get_Item(COleVariant(long(i)), COleVariant(long(j))).pdispVal;usedRange.put_Item(COleVariant(long(i)), COleVariant(long(j)), COleVariant(_T("文字内容"));// 如果需要写入数字,则需要先设置格式,如下:
usedRange.put_NumberFormat(COleVariant(_T("@")));
usedRange.put_Item(COleVariant(long(i)), COleVariant(long(j)), COleVariant(_T("2025"));// 读取或者写入单个单元格,还可以使用
COleVariant ret = usedRange.get_Value2();
usedRange.put_Value2(ret);

释放引用及保存EXCEL文件

//保存
book.SaveCopyAs(COleVariant(strExcelPath));  //SaveCopyAs在strFile路径下保存为指定格式.xlsx的文件book.put_Saved(TRUE);   //将Workbook的保存状态设置为已保存,即不让系统提示是否人工保存// 释放各种引用
usedRange.ReleaseDispatch();sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();books.ReleaseDispatch();books.Close();

退出EXCEL操作

	excelApp.Quit();excelApp.ReleaseDispatch();


http://www.lryc.cn/news/625563.html

相关文章:

  • ios使用saveVideoToPhotosAlbum 保存视频失败提示 invalid video
  • 基于单片机的智能声控窗帘
  • 437. 路径总和 III
  • Qt 插件开发全解析:从接口定义,插件封装,插件调用到插件间的通信
  • SWMM排水管网水力、水质建模及在海绵与水环境中的应用
  • 第5章 高级状态管理
  • 结合BI多维度异常分析(日期-> 商家/渠道->日期(商家/渠道))
  • 深入理解 CAS:无锁编程的核心基石
  • nginx安装配置教程
  • 理解JavaScript中的函数赋值和调用
  • Gemini CLI 详细操作手册
  • 传统概率信息检索模型:理论基础、演进与局限
  • JETSON ORIN NANO进阶教程(六、安装使用Jetson-container)
  • elementplus组件文本框设置前缀
  • 网络基础——网络传输基本流程
  • 【服务器】Apache Superset功能、部署与体验
  • C++高频知识点(二十四)
  • 【基础-判断】所有使用@Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数
  • 一个基于前端技术的小狗寿命阶段计算网站,帮助用户了解狗狗在不同年龄阶段的特点和需求。
  • 【数据结构】二叉树-堆(深入学习 )
  • dockerfile文件中crlf与lf换行符问题
  • 配电网AI识别抓拍装置有哪些突出的功能特点
  • 基于VLM 的机器人操作视觉-语言-动作模型:综述 2
  • 第八十四章:实战篇:图 → 视频:基于 AnimateDiff 的视频合成链路——让你的图片“活”起来,瞬间拥有“电影感”!
  • 小程序插件使用
  • 小程序开发APP
  • UART串口通信编程自学笔记30000字,嵌入式编程,STM32,C语言
  • 面试经验分享-某电影厂
  • 【部署相关】DockerKuberbetes常用命令大全(速查+解释)
  • 走进数字时代,融入数字生活,构建数字生态