NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))
在看这个博客前,请读者先去完整看完: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组件))的更多相关文章
- NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))
NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...
- NX二次开发-使用NXOPEN C++向导模板做二次开发
版本 NX9+VS2012 1.怎么往VS软件里添加VC,C#,VB向导模板 先到NX安装目录下UGOPEN文件夹里找到这三个文件夹 拷贝到VS的安装目录下 这里有几个注意事项,VS2017,VS20 ...
- 网站实现微信登录之嵌入二维码——基于yii2开发的描述
之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...
- 轻松完成excel读写操作- 基于POI的框架BingExcel的使用(1)
Bingexcel User Guide 使用maven进行项目开发目前项目的maven仓库是在github上,浏览地址为 https://github.com/bingyulei007/mvn-re ...
- 轻松完成excel读写操作- 基于POI的框架BingExcel的使用(2)
在进行 类转换时候,系统默认注册了一些转换器,当然你也可以自定局部或者全局的转换器.下面进行具体使用说明 java类说明 对应的java实体类,其属性必须要有__@CellConfig__注解,此注 ...
- NX二次开发-OLE/COM向EXCEL表格中插入图片
今晚有一个兄弟问我怎么往EXCEL里插入图片(加工程序单中需要插入图片),这个我之前也没弄过,回复了他一句不知道,后来刚刚干完游戏吃完鸡,就去VC++的书上翻了翻,还真的被我翻到了.VC++的方法往E ...
- NX二次开发-基于MFC界面对话框与NX交互的开发
打开VS2013 点击新建,选择MFC DLL 点击确定 点下一步 什么都不改,直接点完成 进来之后先编译一下,看是否编译成功 打开项目属性,更改这几处 $(UGII_BASE_DIR)\ugopen ...
- NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板
这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...
- 【NX二次开发】Block UI 目录
Block UI 目录 基本 标签/位图 切换开关 枚举 字符串 多行字符串 操作按钮 列表框 分割线 对象颜色选择器 RGB颜色选择器 绘图区 图层 ...
随机推荐
- 低价购买 (动态规划,变种最长下降子序列(LIS))
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- %各位大佬的博客.tql
线性基:https://www.cnblogs.com/ljh2000-jump/p/5869991.html#4219854 数位DP https://blog.csdn.net/jk211766 ...
- webpack+vue+koa+mongoDB,从零开始搭建一个网站
github 地址 https://github.com/wangxiaoxi... webpakc+vue的搭建1.新建项目文件夹(see-films);2.npm init //初始化项目3.搭建 ...
- css 导航菜单+下拉菜单
一.导航菜单 1.横向导航 代码如下: <!doctype html> <html> <head> <meta charset="utf-8&quo ...
- PostgreSQL角色和权限
PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户.角色可以拥有数据库对象,如表.索引,也可以把这些对象上的权限赋予其它角色,以控制哪 ...
- JS-text节点模拟innerHTML属性
# [在线预览](https://jsfiddle.net/1010543618/mz7ybu8g/2/) text 节点无 innerHTML 这个属性!!! 如果直接修改 text 节点的属性(d ...
- Oracle 用户概念与基本操作
目录 目录 Oracle的用户 通过系统用户来登陆SQLPlus system和sys的区别 查看登陆的用户 启用和锁定一个用户 启用用户 锁定用户 创建用户 修改用户 删除用户 角色权限 常用的用户 ...
- jQuery.Deferred exception: a.indexOf is not a function TypeError: a.indexOf is not a function
jq版本问题 3.2换成1.9就可以了
- promise的基本用法
// Promise 对象,可以保存状态 //Promise 第一步 // 异步代码 写在 Promise的函数中 第二步 const promise = new Promise((resolve, ...
- python_模块 hashlib ,configparser, logging
hashlib模块 算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长 ...