OfficeSharp:把RoslynPad塞进Excel里

几年前,在一个博客网站那里看到了一篇文章:Data Spreads: Write your Excel Macros In C#(https://hotforknowledge.com/2016/10/31/5-data_spreads_excel_macros_in_csharp/),作者使用RoslynPad和ExcelDna做了个excel插件,可以直接在里面写代码操作excel,基本上可作为古老的VBA的替代。因为我对Excel还算有些兴趣,所以想试用一下,奈何里面的下载链接已经失效。在推上问作者,也没有得到回应。于是想着能不能自己实现一个。不过因为自己的编码能力不足,只是用RolsnPad项目Sample里的代码把AvalonEditor嵌入到了插件里,进一步的工作就没法完成了,只好做罢。

上个月浏览github时,突然又对这个工作有了兴趣,便想着借助于AI看看能不能完成这个持续了几年的执念。经过一段时间的努力,在Grok的帮助下,到今天这个Excel插件终于有些样子了。

Github上最新的RoslynPad是基于Dotnet的,由于现在ExcelDna也支持了Dotnet,一开始我就直接基于Dotnet把RolynPad嵌入Excel,可是因为种种问题,不太理想。于是开始魔改RolynPad,把框架从Dotnet改为Dotnet Framework4.8,运行时根据出错的地方,一边问Grok,一边修改并调试,最终基本成功运行。然后把RoslynPad的主窗口改为用户控件,做成任务窗格,并也以单独窗口的形式可以在Excel进程内和新进程打开。

目前实现的功能:

一 脚本模式:

在脚本模式下,C#的文件扩展名是csx,基本可以实现ExcelDna的主要功能,包括动态加载Ribbon菜单、执行宏和自定义函数UDF等。脚本是以源码的形式运行,并可以按一定的规则设置目录,把脚本放进去,当Excel启动OfficeSharp加载时,便可自动运行一次脚本,之后的操作就跟普通加载项没区别了。

二 独立程序模式:

这种模式下,C#的文件扩展名是cs,可以编译为exe文件,但是无法使用Exceldna的相关功能,因为ExcelDna不能脱离Excel进程而起作用。

使用说明:

1、 下载解压后,打开Excel,点击开发工具中的Excel加载项,根据所用的Excel是32位还是64位选择解压后的文件夹内的xll文件,确保OfficeSharp加载项的Ribbon菜单出现。

2、Ribbon菜单上的CTP、IDE、SIDE分别表示打开OfficeSharp窗口时是以什么样的方式呈现。CTP为任务窗格、IDE是在Excel的进程内打开、SIDE是在新进程中打开,你可以选择任何一种方式操作。

3、当打开后,OfficeSharp默认会在你的文档目录中创建OfficeSharpConfig和OfficeSharpMacroAddIn文件夹。OfficeSharpConfig内的文件是OfficeSharp的相关配置文件,OfficeSharpMacroAddIn的子目录ExcelMacroAddIn内需要创建文件夹来放置你自己写的脚本即csx文件作为新的Excel加载项,文件夹内的入口文件必须命名为Entry.csx。

4、Ribbon菜单中的AddInMng可以管理你写的csx加载项,是否在OfficeSharp加载时运行你的csx加载项,以及运行哪几个加载项。

5、使用OfficeSharp创建Ribbon时,需要明确指定ProgId和GUID,不然每次运行时都会创建一个新的同样的Riboon而不是覆盖原来的。同时也需要明确使用ExcelComAddInHelper.LoadComAddIn方法来确保脚本运行后能加载你写的Ribbon。

6、使用OfficeSharp创建UDF和Command时,默认的类是UDF,这样你不必显示调用ExcelDna的UDF注册方法,不然就需要你自己明确调用。

7、新的cs和csx文件创建时,会默认引入using Excel = Microsoft.Office.Interop.Excel和using static OfficeMacroExt.XlApp。目前XlApp下有默认实现的几个Excel属性,你可以在代码中直接使用Application、ActiiveWorkbook、ActiveSheet、ActiveCell、Selection等Excel属性和简单的MsgBox方法(其实是对MessageBox.Show方法的简单包装)。

8、XlApp下有个Query方法,可以对Range数据进行Linq查询以及根据查询条件对Range格式化。Linq查询支持dynamic和强类型。

9、OfficeSharp加载项自带了一个SQL的自定义公式,可以使用sqlite3的语法对excel作sql查询。

待续….

下载链接:

https://wwox.lanzout.com/i1tkD2sq13ri
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇