当前位置: 首页 > 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.dtcms.com/a/338485.html

相关文章:

  • 数据迁移:如何从MySQL数据库高效迁移到Neo4j图形数据库
  • 迁移学习(Transfer Learning)
  • 当机器猫遇上具身智能:一款能读懂宠物心思的AI守护者
  • 分布式搜索(Elasticsearch)基本用法
  • kubeadm部署k8s集群环境搭建
  • Qt密码生成器项目开发教程 - 安全可靠的随机密码生成工具
  • QT聊天项目DAY19
  • 深入理解Prompt构建与工程技巧:API高效实践指南
  • 如何将Date类型的数据转换为LocalDateTime类型
  • 链表-2.两数相加-力扣(LeetCode)
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day7
  • Java开发面试实战:Spring Boot微服务与数据库优化案例分析
  • 微服务如何集成swagger3
  • Leetcode70爬楼梯
  • CF思维训练回顾
  • 摄像头模块在运动相机中的应用
  • 【Linux】文件系统
  • 【基础-判断】用户在长视频、短视频、直播、通话、会议、拍摄类应用等场景下,可以采用悬停适配在折叠屏半折态时,上屏进行浏览下屏进行交互操作
  • 工业相机基本知识解读:像元、帧率、数据接口等
  • ABAP - 会计凭证行项目文本和抬头文本增强
  • ios使用saveVideoToPhotosAlbum 保存视频失败提示 invalid video
  • [Polly智能维护网络] 弹性管道 | 弹性管道构建器 | new | Add | .Build()
  • PIX2SEQ: A LANGUAGE MODELING FRAMEWORK FOR OBJECT DETECTION
  • MongoDB从入门到精通:
  • 【LeetCode】17. 电话号码的字母组合
  • SpreadJS 协同服务器 MongoDB 数据库适配支持
  • [系统架构设计师]云原生架构设计理论与实践(十四)
  • flink+clinkhouse安装部署
  • 【数据结构】二叉树-堆(深入学习 )
  • Flink原理与实践 · 第三章总结