NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等。这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的方法,无论C++还是C#还是VB方式思路都是一样的。先介绍用MFC去做,然后在写一篇博客介绍怎么在NX的二次开发的向导模板里去做。
NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article/details/88922238 (再看这篇博客前,先把当前博客看完。)
版本:VS2013 office2016

图片转载自https://blog.csdn.net/xiaoxiangyuan123456/article/details/70941588, 感谢博主。

  • EXCAL操作(一)打开写入

参考例子:https://blog.csdn.net/ywx123_/article/details/77074038
这是另一个CSDN博主写的,我也是参考他的例子去做的,再此感谢这位博主。

新建一个MFC项目

点击下一步

选择基于对话框

直接点完成,进来后如下图

先点项目,右键属性,更改为多字节。

先什么都不动,编译一下代码。默认看能不能通过。
然后点项目,右键类向导。

弹出窗口如下

点击添加类-类型库中的MFC类

弹出如下

我们切换到文件,点击添加。

此处添加要找到的文件就是你电脑上装的EXCAL.exe这个程序文件。
如果你不知道怎么找到的话,有一个方法,先去开始菜单找到你的EXCAL快捷方式,然后在点右键,打开文件所在的位置。

这样就找到了。

下面在回到MFC项目里面,我们选中这个文件。
添加进来之后,如图所示。

左侧为EXCAL给出的接口,我们来选择一些需要的添加进来。
我们就先添加这七个,后续有其他需求在添加其他的。(先在左侧接口里选中一个,点中间的>就能添加到右侧里生成的类里,不想要就在点中间的<撤退回去。)

然后我们点完成,点确定。就看到头文件自动添加进来了。

我们点击新增进来的EXCAL每个头文件,都把第一行的那句注释掉。

都注释完之后,我们在#include "stdafx.h"里添加EXCAL头文件,

然后编译代码,出现如下报错问题。这时我们双击这个错误,跳到对应的代码那里。

有问题的位置如下

我们需要在DialogBox前面加上一个 _ 下划线。再去编译就通过了。别问我为什么,我答不上来,你照着搞就是了,别人就是这么搞的。

好的,到这里我们这个项目环境就算搭建完成了。
下面可以写代码了。
点击MFC那个对话框界面,双击确定。在里面写代码。

代码如下:打开EXCAL,写入内容。

     //1.创建基本对象
CApplication App; //创建应用程序实例
CWorkbooks Books; //工作簿,多个Excel文件
CWorkbook Book; //单个工作簿
CWorksheets sheets;//多个sheet页面
CWorksheet sheet; //单个sheet页面
CRange range; //操作单元格
//2.打开指定Excel文件,如果不存在就创建
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH, (TCHAR*)path);//获取当前路径
CString strExcelFile = (TCHAR*)path;
CString strdevName = _T("\\Test.xlsx"); //xls也行
strExcelFile += strdevName;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); LPDISPATCH lpdisp = NULL;
//1.创建Excel实例
if (!App.CreateDispatch(_T("Excel.Application"), NULL))
{
AfxMessageBox(_T("创建Excel实例失败"));
exit(-);
}
else
{
AfxMessageBox(_T("创建成功"));
}
App.put_Visible(TRUE); //打开Excel
App.put_UserControl(FALSE);
//2. 得到workbooks容器
Books.AttachDispatch(App.get_Workbooks());
Book.AttachDispatch(Books.Add(covOptional));
sheets.AttachDispatch(Book.get_Worksheets());
sheet.AttachDispatch(sheets.get_Item(COleVariant((short)))); //获取sheet1
sheet.put_Name(_T("TestName")); //设置sheet1名字 //3. 加载要合并的单元格
range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")), COleVariant(_T("E2"))), TRUE);
range.Merge(COleVariant((long))); //合并单元格 //4. 设置表格内容
range.AttachDispatch(sheet.get_Cells(), TRUE); //加载所有单元格
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("电气工程及其自动化课程统计")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("课程名称")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("课时")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("难度")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("教学方式"))); range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("电磁场")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("变态难")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("老师讲课"))); range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("电机学")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("难")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("老师讲课加实验"))); range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("PLC")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("普通")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("老师讲课加实验"))); range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("电力系统")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("难")));
range.put_Item(COleVariant((long)), COleVariant((long)), COleVariant(_T("老师讲课加实验"))); range.AttachDispatch(sheet.get_UsedRange());//加载已使用的单元格
range.put_WrapText(COleVariant((long))); //设置文本自动换行 //5.设置对齐方式
//水平对齐:默认 1 居中 -4108, 左= -4131,右=-4152
//垂直对齐:默认 2 居中 -4108, 左= -4160,右=-4107
range.put_VerticalAlignment(COleVariant((long)-));
range.put_HorizontalAlignment(COleVariant((long)-));
//6.设置字体颜色
CFont0 ft;
ft.AttachDispatch(range.get_Font());
ft.put_Name(COleVariant(_T("楷体"))); //字体
ft.put_ColorIndex(COleVariant((long)));//颜色 //黑色
ft.put_Size(COleVariant((long))); //大小 range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")), COleVariant(_T("E2"))), TRUE);
ft.AttachDispatch(range.get_Font());
ft.put_Name(COleVariant(_T("华文行楷")));
ft.put_Bold(COleVariant((long)));
ft.put_ColorIndex(COleVariant((long))); //颜色
ft.put_Size(COleVariant((long))); //大小
Book.SaveCopyAs(COleVariant(strExcelFile)); //保存 Book.put_Saved(TRUE);
//8.释放资源
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
Book.ReleaseDispatch();
Books.ReleaseDispatch();
App.ReleaseDispatch();

编译后,我们点调试-开始执行。

点确定,自动打开了EXCAL,并写入了内容。EXCAL自动保存在了你这个项目的当前文件夹里。

就写到这里了,好多我也没有用过,回头用到了再去研究。其他的相关内容大家参考下面这些大神们的博客吧。
参考资料:
一个封装的实用的EXCEL类 https://blog.csdn.net/gyssoft/article/details/1592104
vs对Excel读写操作 https://blog.csdn.net/qq_16334327/article/details/81353248
在 VS2008 下操作 Excel 的方法总结 https://blog.csdn.net/DavidHsing/article/details/4231592
VS2010 对Excel读写操作 https://blog.csdn.net/ywx123_/article/details/77074038
VS2010 MFC Excel(1)https://www.cnblogs.com/zztong/p/6695283.html
VS2010 MFC 读取Excel(2)https://www.cnblogs.com/zztong/p/6695284.html
VS2010对Excel2010进行操作 https://blog.csdn.net/xiaoxiangyuan123456/article/details/70941588
(转)VS2010 MFC 操作Excel(读写)https://blog.csdn.net/zhaodan19861107/article/details/80675888
VS2010 MFC读取Excel文件中数据 https://blog.csdn.net/V10_x/article/details/78464453
MFC vs2012 Office2013 读写excel文件(OLE/COM)https://blog.csdn.net/baidu_37503452/article/details/72842573
vs创建控制台程序使用C++读写excel文件(ODBC方式)https://www.cnblogs.com/renjiashuo/p/7545784.html
VC++遍历Excelhttps://blog.csdn.net/z3312656/article/details/8282194
感谢各位大神无私的奉献。

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

  1. NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))

    在看这个博客前,请读者先去完整看完:NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article ...

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

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

  3. NX二次开发-使用MFC对话框不能用UF_UI_select等函数解决方法

    VC/MFC调用UG Dialog要进入加锁状态 加锁 UF_UI_lock_ug_access ( UF_UI_FROM_CUSTOM ); 此处为UF_UI_select的函数 解锁 UF_UI_ ...

  4. NX二次开发-UFUN获取显示在NX交互界面的对象UF_OBJ_is_displayable

    NX9+VS2012 #include <uf.h> #include <uf_disp.h> #include <uf_obj.h> #include <u ...

  5. NX二次开发-bat脚本文件切换NX的环境变量(NX路径和语言)

    路径环境变量切换到NX9.bat @echo off setx /M UGII_BASE_DIR "D:\Program Files\Siemens\NX 9.0" ------- ...

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

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

  7. NX二次开发-创建(临时)坐标系

    函数:UF_CSYS_create_csys() . UF_CSYS_create_temp_csys() 函数说明:创建坐标系 .创建临时坐标系 用法: #include <uf.h> ...

  8. 【NX二次开发】多种变换

    变换的种类: uf5942 矩阵乘积变换 uf5943 平移变换 uf5944 缩放变换 uf5945 旋转变换 uf5946 镜像变换 最后使用 uf5947 实现uf5942-uf5946的变换. ...

  9. NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条

    半年前在一些QQ群看到有大神NX二次开发做出了进度条,那个时候我还不会弄,也不知道怎么弄得,后来断断续续得研究了一下,直到今天我把它做出来了.内心还是很喜悦的!回想自己这两年当初从没公司肯给我做NX二 ...

随机推荐

  1. sql-主键、外键、索引

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  2. POJ 3279 Fliptile (dfs+二进制)

    Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more ...

  3. OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

    昨天学习了Foundation框架中NSArray类和NSMutableArray类:http://blog.csdn.net/jiangwei0910410003/article/details/4 ...

  4. SCP-Py-001

    项目编号:Py-001 项目等级:Euclid 特殊收容措施: Py-001必须被存储于基金会主站的网络硬盘中,并切断一切与互联网的连接. Py-001突破收容在网络上传播后,一旦在一台计算机上被下载 ...

  5. 2019牛客第八场多校 E_Explorer 可撤销并查集(栈)+线段树

    目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(1000 ...

  6. lambda表达式学习例子

    https://www.cnblogs.com/franson-2016/p/5593080.html https://www.cnblogs.com/fx-blog/p/11745205.html ...

  7. 政府网站综合防护系统(网防G01)

    政府网站综合防护系统,简称“网防G01”,是首款专门针对政府网站及服务器等关键信息基础资源进行综合防护的产品,由公安部第一研究所和计算机病毒防治技术国家工程实验室(北京)研发. 网防G01的架构 由服 ...

  8. POJ 1797 Heavy Transportation (Dijkstra)

    题目链接:POJ 1797 Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter pro ...

  9. 2019浙江省赛 Strings in the Pocket【manacher】

    Strings in the Pocket 题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6012 题意 给你两个字符 ...

  10. VC2008中如何为MFC应用程序添加和删除消息响应函数

    最近重温<MFC Windows应用程序设计>第二版这本书,里面的代码全部是使用VC6.0写的,我Win7下安装的是VS2008开发环境. VC2008下添加和删除常见的消息响应函数有两种 ...