在看这个博客前,请读者先去完整看完:NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article/details/88922030 这篇博客,要不然你听不懂我下面在说什么。

版本NX11+VS2013+office2016

首先我们通过NX开发向导创建了一个模板。

先把项目属性改成多字节。
下面我们把前面做的MFC项目里的几个EXCAL头文件和stdafx一块拷过来,加到NX的项目里。

在NX的CPP里加上#include "stdafx.h"头文件

编译出现如下问题,把stdafx.h"头文件里的//#include "targetver.h"注释掉,在编译。

出现 warning C4003: “CreateDialogW”宏的实参不足,双击报错问题,跳转到对应代码位置。
把CreateDialog前加_下划线。(不要问我为什么这么做,我解释不出来),反正你在编译就通过了。同时也不当误用Block UI

到这里这个操作EXCAL的项目搭建就完事了。
去自己定义的回调函数里,直接写操作EXCAL的代码就行了。
下面是打开EXCAL,读取内容的一个简单例子。写在模板的do_it里

  1. LPDISPATCH lpDisp;
  2. COleVariant vResult;
  3. COleVariant
  4. covTrue((short)TRUE),
  5. covFalse((short)FALSE),
  6. covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  7.  
  8. if (!App.CreateDispatch("Excel.Application"))
  9. {
  10. uc1601("创建Excel实例失败", );
  11. }
  12.  
  13. App.put_Visible(TRUE); //使Excel可见
  14. App.put_UserControl(TRUE);
  15. App.put_DisplayAlerts(false);
  16.  
  17. Books.AttachDispatch(App.get_Workbooks());
  18.  
  19. //打开EXCAL
  20. lpDisp = Books.Open("D:\\ABC.xlsx", covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,
  21. covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);
  22. Book.AttachDispatch(lpDisp);
  23.  
  24. //得到Worksheets
  25. lpDisp = Book.get_Worksheets();
  26. sheets.AttachDispatch(lpDisp);
  27.  
  28. //获得Sheet的数量
  29. int count = sheets.get_Count();
  30.  
  31. for (int k = ; k <= count; k++)
  32. {
  33. _variant_t var = (long)k;
  34. sheet.AttachDispatch(sheets.get_Item(var));
  35.  
  36. if (sheet.get_Name() == "DEF")
  37. {
  38. sheet.Activate();
  39.  
  40. //获得活动的WorkSheet(工作表)
  41. sheet.AttachDispatch(Book.get_ActiveSheet(), TRUE);
  42.  
  43. //获得使用的区域Range(区域)
  44. range.AttachDispatch(sheet.get_UsedRange(), TRUE);
  45.  
  46. //获得使用的行数
  47. long lgUsedRowNum = ;
  48. range.AttachDispatch(range.get_Rows(), TRUE);
  49. lgUsedRowNum = range.get_Count();
  50.  
  51. //获得使用的列数
  52. long lgUsedColumnNum = ;
  53. range.AttachDispatch(range.get_Columns(), TRUE);
  54. lgUsedColumnNum = range.get_Count();
  55.  
  56. //读取Sheet名称
  57. CString strSheetName = sheet.get_Name();
  58.  
  59. //得到全部Cells,此时,userRange是cells的集合
  60. range.AttachDispatch(sheet.get_Cells(), TRUE);
  61.  
  62. //遍历整个Excel表格
  63. double Date1;
  64. CString str1;
  65. for (int j = ; j <= lgUsedRowNum; j++)
  66. {
  67. for (int i = ; i <= lgUsedColumnNum; i++)
  68. {
  69. CString str;
  70. str.Format("%c%d", + i - , j);
  71. lpDisp = range.get_Range(COleVariant(str), COleVariant(str));
  72.  
  73. CRange range;
  74. range.AttachDispatch(lpDisp);
  75.  
  76. VARIANT vl = range.get_Value2();
  77.  
  78. if (vl.vt == VT_R8) //8字节的数字
  79. {
  80.  
  81. Date1 = vl.dblVal;
  82. char msg[];
  83. sprintf_s(msg, "%f", Date1);
  84.  
  85. uc1601(msg, );
  86. }
  87.  
  88. if (vl.vt == VT_BSTR) //字符串
  89. {
  90.  
  91. str1 = vl.bstrVal;
  92.  
  93. uc1601(str1, );
  94.  
  95. }
  96. }
  97.  
  98. }
  99.  
  100. }
  101. }
  102.  
  103. //释放对象,关闭EXCEL
  104. //range.ReleaseDispatch();
  105. //sheet.ReleaseDispatch();
  106. //sheets.ReleaseDispatch();
  107. //Book.Close(covOptional, covOptional, covOptional);
  108. //Book.ReleaseDispatch();
  109. //Books.Close();
  110. //Books.ReleaseDispatch();
  111. //App.Quit();
  112. //App.ReleaseDispatch();

更多关于EXCAL操作代码,请大家看NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))https://www.cnblogs.com/nxopen2018/p/10981416.html 这篇文章,介绍的比较多。当前这个文章主要还是介绍怎么去搭建NX开发操作EXCAL的环境,用NX UI界面的项目,环境也是这样搭建的。

NX二次开发CreateDialog函数在UI.hxx文件和WinUser.h中的冲突【转载】

https://www.cnblogs.com/nxopen2018/p/11811708.html

NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))的更多相关文章

  1. NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

    NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...

  2. NX二次开发-使用NXOPEN C++向导模板做二次开发

    版本 NX9+VS2012 1.怎么往VS软件里添加VC,C#,VB向导模板 先到NX安装目录下UGOPEN文件夹里找到这三个文件夹 拷贝到VS的安装目录下 这里有几个注意事项,VS2017,VS20 ...

  3. 网站实现微信登录之嵌入二维码——基于yii2开发的描述

    之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...

  4. 轻松完成excel读写操作- 基于POI的框架BingExcel的使用(1)

    Bingexcel User Guide 使用maven进行项目开发目前项目的maven仓库是在github上,浏览地址为 https://github.com/bingyulei007/mvn-re ...

  5. 轻松完成excel读写操作- 基于POI的框架BingExcel的使用(2)

    在进行 类转换时候,系统默认注册了一些转换器,当然你也可以自定局部或者全局的转换器.下面进行具体使用说明  java类说明 对应的java实体类,其属性必须要有__@CellConfig__注解,此注 ...

  6. NX二次开发-OLE/COM向EXCEL表格中插入图片

    今晚有一个兄弟问我怎么往EXCEL里插入图片(加工程序单中需要插入图片),这个我之前也没弄过,回复了他一句不知道,后来刚刚干完游戏吃完鸡,就去VC++的书上翻了翻,还真的被我翻到了.VC++的方法往E ...

  7. NX二次开发-基于MFC界面对话框与NX交互的开发

    打开VS2013 点击新建,选择MFC DLL 点击确定 点下一步 什么都不改,直接点完成 进来之后先编译一下,看是否编译成功 打开项目属性,更改这几处 $(UGII_BASE_DIR)\ugopen ...

  8. NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板

    这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...

  9. 【NX二次开发】Block UI 目录

    Block UI 目录  基本   标签/位图   切换开关   枚举   字符串   多行字符串   操作按钮   列表框   分割线   对象颜色选择器   RGB颜色选择器   绘图区   图层 ...

随机推荐

  1. Adobe 2019 全家桶 Mac 版(最新版)

    经过不断的改革换新,Adobe2019系列已经全面来袭.在软件更新的同时,激活工具也不断的完善!小编带来的是Adobe2019注册机专门为同系列软件量身定做的注册破解工具!   ▌软件下载-关注公众号 ...

  2. Python基础教程(007)--Python的优缺点

    前言 了解Python的优点和缺点 知识点 优点 简单易学 免费,开源 面相对象 丰富的库 可扩展性 缺点 运行速度慢 国内市场较小 中文资料匮乏 总结: 明白Python的优点和缺点

  3. Kubernetes v1.16 对API的更改

    前段时间安装Kubernetes v1.16.2,然后从v1.14版本的拷贝yaml文件过来执行,很多都报没有相应的api,查看一下新版本的api admissionregistration.k8s. ...

  4. Selenium webdriver 安装(一)

    6年的.NET开发,干过小项目,做过研发,任何架构.设计模式.各种文档齐全.技术大牛,给我最深的体会是都不如用户最后的轻轻一点,一下毁所有.这个时候我突然想起了一首歌<都选C>哈哈.如何防 ...

  5. kafka ConsumerConfig 配置

  6. 能打开电脑都看懂的系列之Windows下修改MongoDB用户密码

    起因 还能怎么滴,我忘了MongoDB的密码呗. 操作 进入MongoDB的安装目录的bin目录下,(我的目录是D:\developer\MongoDB\Server\4.2\bin): 用记事本打开 ...

  7. VTemplate模板引擎的使用--入门篇

    1.什么是VTemplate模板引擎? 详细请点击这里. 2.怎样使用VTemplate模板引擎? 第1步: 下载VTemplate模板引擎的最新库文件(从这里下载),下载回来后将库文件引入到你的项目 ...

  8. Codeforces 578B "Or" Game (前缀和 + 贪心)

    Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] 题目链接:B. "Or" Game You are given \(n\) ...

  9. 力扣算法——142LinkedListCycleII

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. To r ...

  10. layui 下拉框 动态获取数据

    $(function(){var grade=$("#grade");grade.append("一年级"); //添加下拉列表grade.append(&qu ...