Bootstrap

VSTO(C#)Excel开发1:起步 示例项目

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        VSTO是Office VBS开发的替代,虽然VBA仍然可用,但是必须使用专门的扩展名xlsm,而且,vba输入“.”没有自动提示,这是很不爽的,所以如果不是VBA高手没必要死守VBA,直接用VSTO就可以了。

        我琢磨VSTO的动机是写一个能自动把表格调整到一张纸的功能,Excel自身的功能只能按锁定纵横比缩放,不能调整纵横比,打印东西觉得很不爽。

        当然今天我们只是开始。

目录

一、安装Visual Studio 的Office开发工作负荷

 二、创建新项目

三、添加功能区并实现功能代码

四、运行效果

五、卸载扩展项

六、Excel管理加载项


一、安装Visual Studio 的Office开发工作负荷

        使用VSTO首先要安装Visual Studio 的“Office/SharePoint开发”:

        我用的是VS2022社区版和Office365。 

 二、创建新项目

        按照默认设置创建即可。编译一下应该是可以编译的,点运行会打开一个Excel程序。当然现在没什么可看的。

三、添加功能区并实现功能代码

        我们的代码要做点什么最好从按钮入手,这样最容易调试,为此要先加一个功能区。

        在项目上右键,“添加”-“新建项”:

        注意别选成“功能区(XML)”了,这个只能用XML编辑器打开,而“功能区(可视化设计器)”才可以用设计器打开。文件名默认的就好,不用改。

        然后双击打开新添加的Ribbon1.cs,会打开设计器,同时会打开工具箱,工具箱里面有“Office功能区控件” ,拖一个按钮到设计器里面:

        拖过来的按钮默认名字叫“button1”,没有边框,不过不重要啦,我们直接在按钮上双击,VS会自动生成按钮处理程序的框架:

         里面的两行代码是我写的,内容是这样:

using System.Windows.Forms;


			Microsoft.Office.Interop.Excel.Range currentCell = Globals.ThisAddIn.Application.ActiveCell;
			MessageBox.Show(currentCell.Text);

        注意要加那个using才能使用MessageBox。

        这两行代码的作用是获取当前的活动单元格,把里面的文本显示出来。

        编译运行应该没问题。然后我们来看效果。

四、运行效果

        编译运行,会打开Excel,启动时选择空白工作簿:

        随便找个格子输点东西,然后点开功能区的“加载项”:

         我们看到了我们添加的功能区,点一下按钮“button1”:

        注意,如果你刚输入内容,没有点过别的格子,新的内容其实还没有进到里面呢,只会显示一个空消息框,点一下别的格子,再点回这个单元格,再去功能区点击按钮就会得到内容了。

        关闭时无需保存文档,因为没什么实际内容。

五、卸载扩展项

        前面我们是从VS启动的,Excel里面有效果是可以理解的,如果不从VS启动应该就没有了吧?

        不是的,编译的时候就把相关信息写到注册表了,所以不用VS直接打开Excel加载项仍然是存在的。

        为了清理这些信息,需要在VS执行“清理解决方案”,清理之后会发现Excel里面连“加载项”这个功能区都没有了(如果没有别的加载项的话)。

六、Excel管理加载项

        我们编译程序就直接把加载项塞给了Excel,那影不影响别的事啊?Excel里面是可以选择启用哪些加载项的。

        打开Excel的“文件”-“选项”:

         “自定义功能区”里面“主选项卡”的“开发工具”默认是没有勾选的,勾选上。“加载项”默认应该就是勾选的。

        然后在功能区“开发工具”上的“加载项”组点击“COM加载项”:

         箭头指向的就是我们今天写的加载项。


下一篇:

VSTO(C#)Excel开发2:Excel对象模型和基本操作-CSDN博客


(这里是文档结束) 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;