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

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.xdnf.cn/news/18188.html

相关文章:

  • UDI数据库应用之后端本地数据库搭建实战(二)
  • 【高并发内存池】一、简介 定长内存池实现
  • 156-基于Flask的北京市商铺数据可视化分析系统
  • k8sday11服务发现(2/2)
  • 微服务如何集成swagger3
  • 工业相机基本知识解读:像元、帧率、数据接口等
  • 解决linux中磁盘爆满(准确说是文件系统爆满)导致mysql启动失败的问题——对文件系统进行扩容
  • 微信小程序实现蓝牙开启自动播放BGM
  • Git#revert
  • Ansible 角色管理指南
  • UART串口通信编程自学笔记30000字,嵌入式编程,STM32,C语言
  • 【Linux仓库】进程创建与进程终止【进程·柒】
  • 第八十三章:实战篇:文 → 图:Prompt 控制图像生成系统构建——从“咒语”到“神作”的炼成!
  • 数据结构——单链表
  • STL库——string(类模拟实现)
  • 【PHP】模拟斗地主后端编写
  • Redis--day8--黑马点评--分布式锁(一)
  • electron 开发笔记
  • 拓扑排序详解:从力扣 207 题看有向图环检测
  • 第一阶段C#-14:委托,事件
  • 【牛客刷题】最大公约数与最小公倍数:算法详解与实现
  • 一个基于纯前端技术实现的五子棋游戏,无需后端服务,直接在浏览器中运行。
  • Leetcode 3649. Number of Perfect Pairs
  • 面向R语言用户的Highcharts
  • 浅谈 Python 正则表达式中的 groups()
  • SpringBoot3整合OpenAPI3(Swagger3)完整指南
  • 【Python】Python 多进程与多线程:从原理到实践
  • Nodejs学习
  • CPTS---Active 复现
  • 【matlab】考虑源荷不平衡的微电网鲁棒定价研究