ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 23661|回复: 63

[讨论] EXCEL插件使用WPF窗体

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2021-5-17 10:30 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 wodewan 于 2021-5-20 22:43 编辑

在EXCEL插件中窗体一般使用的比较多的是WinForm,WPF用到的不多。什么是WPF? 简单点说WPF也是一种窗体,元素更丰富,界面更细腻,功能更强大。这个东西估计感兴趣的不多,但结合一些开源控件,使用下来,体验还是不错,有兴趣的可以参考参考。先看一张简单的效果图和打包的XLL文件:
包含几个基本控件的使用与效果: 文本框、日期选择控件、浮动窗体、下拉框、进度条等
1.gif


环境及工具:
1. 因为是EXCEL插件,首先需要的是一个工具,你可以选择VSTO,也可以选择EXCEL-DNA,这里用的是EXCEL-DNA;
2. 另外为方便实现效果,你可以使用一些图形库,这里用的是HandyContol,可以直接Nuget安装;
3. .net及Vs这个就不多说了
实现方式:
1. 先建一个EXCEL-DNA的项目,然后加入一个App.xaml(注意:因为这个类是个分布类,所以前端和后台都必须继承Application类),当然这个不是必须的,加这个的目的其实是为了HandyContol,因为里面有些资源是放在Application的Resource里的,而EXCEL-DNA项目是个类库,它是没有App文件的,然后将HandyContol的相关资源加到App.xaml的资源中。如下图:
image.jpg
2. 添加一个主窗体,这里需要注意的是一般情况下,在这个项目中添加的是一个Usercontrol控件,所以需要WINFORM来承载显示,但如果稍作修改既可以单独呈现,就是将WPF界面的根标签修改为window或图形库对应的window控件,同时将后台代码中的类也修改为Window即可。
image.jpg

3. 现在界面Window有了,剩下的就简单了,运行APP初始化,加载相关资源,显示即可,这里用的是EXCEL-DNA的Ribbon来加载,代码如下:
image.jpg
4. 基本思路就是这样,有兴趣的可以试试,WPF强大的地方其实不只是界面的,更强大的是数据的绑定,比如例子中的Slider滚动条滑块就是和文本框、进度条绑定的,调整数据条时,文本框内容在改变,进度条内容也同步更新,这些都是绑定的功能。高级点的就是 Mvvm,EF数据库框架。。。

Wpf-Demo.rar

1.15 MB, 下载次数: 369

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-5-19 18:45 | 显示全部楼层
这个很厉害啊。
那么,自定义任务窗格CustomTaskPane可以使用这种类型的窗体和控件吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-19 20:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
塔奇克马 发表于 2021-5-19 18:45
这个很厉害啊。
那么,自定义任务窗格CustomTaskPane可以使用这种类型的窗体和控件吗?

可以的,之前写着玩的几个插件都是用的WPF作为CostomTaskPane的Ui的,加个ElementHost承载WPF就行,如下图:
1.gif

TA的精华主题

TA的得分主题

发表于 2021-5-20 20:17 | 显示全部楼层
咱们玩票插件也要跟上新趋势才行。
毕竟在默认情况下,WinForms对高分辨率下不同的DPI支持是有一丢丢轻微的兼容性问题。

TA的精华主题

TA的得分主题

发表于 2021-5-20 20:57 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-20 22:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wodewan 于 2021-5-20 23:23 编辑

继续补充一个简单的WPF实例说下里面的数据绑定(Binding),语言用C#和WPF(Xaml)。这个例子在论坛里有很多版本,就是窗格导航栏,先看下效果:
1. 多窗口同时显示CustomerPane2. TreeView和工作簿、工作表实时更新、切换。

1.gif

用WPF实现的原理和WinForm相差就比较大,Winform里可能存在多个事件的相互调用来实现,而WPF用Binding可以相对比较方便的实现:
主要说说思路:
1. 先定义一个TreeView的树形结构,如下图:
image.png
image.jpg

2. 将数据绑定到Treeview的数据模板中,如下图:
image.jpg
3. 建立一个通知类型的集合作为上面模板的数据源:
image.png
4. 最后就是维护这个TreeNode类型的集合T就可以,因为用了Binding,所以T的变化会自动推送到Ui层显示,也就是所谓的界面层和数据层分离。


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-5-21 10:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-5-21 17:47 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-22 13:22 | 显示全部楼层
本帖最后由 wodewan 于 2021-5-22 13:38 编辑

VSTO版的源码,build过,debug里已经有DLL,Handy库应该不要Nuget了,直接运行项目文件。
补充一点:
Handy不止一个版本,写法和功能上也有不同,细节可看看官网或Git

VSTOWPF.rar

721.47 KB, 下载次数: 349

TA的精华主题

TA的得分主题

发表于 2021-5-22 18:29 | 显示全部楼层
wodewan 发表于 2021-5-22 13:22
VSTO版的源码,build过,debug里已经有DLL,Handy库应该不要Nuget了,直接运行项目文件。
补充一点:
Han ...

感谢感谢,我们研究下
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 00:40 , Processed in 0.045127 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表