在看这个博客前,请读者先去完整看完: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里

     LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if (!App.CreateDispatch("Excel.Application"))
{
uc1601("创建Excel实例失败", );
} App.put_Visible(TRUE); //使Excel可见
App.put_UserControl(TRUE);
App.put_DisplayAlerts(false); Books.AttachDispatch(App.get_Workbooks()); //打开EXCAL
lpDisp = Books.Open("D:\\ABC.xlsx", covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);
Book.AttachDispatch(lpDisp); //得到Worksheets
lpDisp = Book.get_Worksheets();
sheets.AttachDispatch(lpDisp); //获得Sheet的数量
int count = sheets.get_Count(); for (int k = ; k <= count; k++)
{
_variant_t var = (long)k;
sheet.AttachDispatch(sheets.get_Item(var)); if (sheet.get_Name() == "DEF")
{
sheet.Activate(); //获得活动的WorkSheet(工作表)
sheet.AttachDispatch(Book.get_ActiveSheet(), TRUE); //获得使用的区域Range(区域)
range.AttachDispatch(sheet.get_UsedRange(), TRUE); //获得使用的行数
long lgUsedRowNum = ;
range.AttachDispatch(range.get_Rows(), TRUE);
lgUsedRowNum = range.get_Count(); //获得使用的列数
long lgUsedColumnNum = ;
range.AttachDispatch(range.get_Columns(), TRUE);
lgUsedColumnNum = range.get_Count(); //读取Sheet名称
CString strSheetName = sheet.get_Name(); //得到全部Cells,此时,userRange是cells的集合
range.AttachDispatch(sheet.get_Cells(), TRUE); //遍历整个Excel表格
double Date1;
CString str1;
for (int j = ; j <= lgUsedRowNum; j++)
{
for (int i = ; i <= lgUsedColumnNum; i++)
{
CString str;
str.Format("%c%d", + i - , j);
lpDisp = range.get_Range(COleVariant(str), COleVariant(str)); CRange range;
range.AttachDispatch(lpDisp); VARIANT vl = range.get_Value2(); if (vl.vt == VT_R8) //8字节的数字
{ Date1 = vl.dblVal;
char msg[];
sprintf_s(msg, "%f", Date1); uc1601(msg, );
} if (vl.vt == VT_BSTR) //字符串
{ str1 = vl.bstrVal; uc1601(str1, ); }
} } }
} //释放对象,关闭EXCEL
//range.ReleaseDispatch();
//sheet.ReleaseDispatch();
//sheets.ReleaseDispatch();
//Book.Close(covOptional, covOptional, covOptional);
//Book.ReleaseDispatch();
//Books.Close();
//Books.ReleaseDispatch();
//App.Quit();
//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. MPU6050寄存器记录

    参考资料:http://blog.sina.com.cn/s/blog_8240cbef01018i10.html 不过有一些寄存器没有写到,所以我自己加一点: 1)Register 25  - IN ...

  2. 大碗宽面Alpha第九周会议总结

    软件工程每周博客: 本周二我们进行了小组会议,对正在做的评课网站——海大优选进行了整体分析和明确分工.首先我们对整体网页进行了需求分析和框架分析,然后进行了分工,前端同学两人,后端同学两人,文档同学一 ...

  3. tp5.0如何获取header的Authorization值

    tp5.0如何获取header的Authorization值$request->header();好像没有这个值的但是发送请求头部有的 解决方案: 在.htaccess 文件中加入 设置 Set ...

  4. 队列Queue--数组实现

    队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...

  5. JS-模拟printf

    function printf(){ var args = [].slice.call(arguments), fmt = args.shift(), args_index = 0; ///%(填充的 ...

  6. VMware里克隆出来的CentOS Linux device eth0 does not seem to be present, delaying initialization

    解决办法:1.ifconfig eth1 确定新网卡的MAC地址.nmcli con 确定新网卡的UUIDvim /etc/udev/rules.d/70-persistent-net.rules把原 ...

  7. angular 通过路由获取ID

    constructor( private dataService: TestListsService, private route: ActivatedRoute, ) { // 通过路由获取ID c ...

  8. Eclipes更改字体颜色

    有图有真像 更改字体大小

  9. 部署项目问题(maven打包jar不对应,导致启动时一直找不到某个类)

    项目是springboot+maven  打包用maven的插件package 下面是打包后的目录结构  project-1.0 和project-1.0.tar.gz是一样的  区别就是一个是压缩包 ...

  10. css3 盒模型与 伪元素综合应用案例

    先来简略理解下盒模型: 在 css3 之前,盒模型默认为 box-sizing : content-box,这种模式下的盒模型计算大小方式为,width + padding + border : 而 ...