Office加载项
出自我的个人主页 Alvin Blog
前言
前一段时间公司做了有关Excel 加载项的开发,也遇到了很多坑,所以在此记录一下,有两个原因,1.留给以后在用到加载项的时候,复习所用,避免 跳进同一个坑里。2.留给其他做加载项的人一个参考
概述
此处只大概说一下,如果想了解详细的,请到office加载项官网
Office 开发有很多种选择
加载项的组成部分
- 清单文件,mainfast.xml 该文件包含了以下内容
- 外接程序的显示名称、说明、ID、版本和默认区域设置。
- web项目的地址
- 加载项的菜单样式以及布局
- 外接程序的权限级别和数据访问要求。
- web项目,任何web项目均可,但是一定要兼容ie11,因为office调用的是本地的ie11浏览器。
功能
- 通过mainfast.xml文件控制菜单,
- web项目是通过点击菜单展示在任务栏,展示效果
- web项目中的js文件可以控制Office,操作Office的文件,例如向Excel输入内容
开始做一个项目
跟官网开发的步骤有些不同,但是两种方法均可
由于我之前开发的是Excel加载项,所以接下来的例子,均是Excel加载项开发的例子,其他的加载项应该同理。
第一、新建Excel 外接程序,使用的开发工具是vs2017。
新建项目的过程中,你会发现它有两个选项,默认选择第一个,第二个是更丰富的外接程序,可以实现更多Excel的自定义行为。
项目建好之后,项目中的xml文件已经在里面了,项目新建之后会出现默认的节点,并且已经给出了注释,注释非常详细。此处指介绍一些重要的节点,如果感兴趣到此处去了解
- ID: 此处创建GUID可以去线上生成,vs2017也自带创建guid。工具->创建GUID
<!-- 重要事项!ID 对于外接程序必须是唯一的,如果重复使用该清单,请确保将此 ID 改为新的 GUID。 -->
<Id>2a18a912-de33-4f62-92f7-ce7c2899ea77</Id>
- AppDomains:由于浏览器是不允许跨域访问的,你必须要把你web的域名放在此处,才可以使用,如果你想使用多个web项目,那就都在此处列出域名,比如我测试的地址是localhost:8081
<!-- 导航时允许使用的域。例如,如果使用 ShowTaskpane,然后得到一个 href 链接,则只有在此列表上存在该域时,才允许导航。 -->
<AppDomains>
<AppDomain>localhost:8081</AppDomain>
<AppDomain>gooogle.com</AppDomain>
<AppDomain>mywebsite.com</AppDomain>
</AppDomains>
- 默认访问的首页,此处的~remoteAppUrl即是你的url,在测试时会自动替换成你的web服务地址,在上线发布时,需要手动替换
<DefaultSettings>
<SourceLocation DefaultValue="localhost:8081" />
</DefaultSettings>
- Host:此节点下的子节点即是你展示在Excel顶部的菜单栏,使用节点来控制显示
- Resources:此节点存放所有的资源,比如菜单名称、要访问的url、图片的地址
- web项目开始后执行的
<GetStarted>
<!-- “入门”标注的标题。resid 属性指向 ShortString 资源 -->
<Title resid="Contoso.GetStarted.Title"/>
<!-- 入门标注的描述。ResID 指向 LongString 资源 -->
<Description resid="Contoso.GetStarted.Description"/>
<!-- 指向详细说明外接程序使用方法的 URL 资源。 -->
<LearnMoreUrl resid="Contoso.GetStarted.LearnMoreUrl"/>
</GetStarted>
- FunctionFile:如果想在菜单栏里操作Excel文件,比如要写东西,必须要在此处增加那个包含js的html文件
<!-- 函数文件是包含 JavaScript 的 HTML 页面,将在此页面中调用用于 ExecuteAction 的函数。 将 FunctionFile 视为代码隐藏 ExecuteFunction。 -->
<FunctionFile resid="Contoso.DesktopFunctionFile.Url" />
- 菜单区域:分为组、一级菜单、二级菜单。只能到二级菜单。
<!-- PrimaryCommandSurface 为 Office 主功能区。 -->
<ExtensionPoint xsi:type="PrimaryCommandSurface">
<!-- 使用 OfficeTab 来扩展现有选项卡。使用 CustomTab 来创建新选项卡。 -->
<OfficeTab id="TabHome">
<!-- 确保为组提供唯一 ID。建议 ID 为使用公司名的命名空间。 -->
<Group id="Contoso.Group1">
<!-- 为组指定标签。resid 必须指向 ShortString 资源。 -->
<Label resid="Contoso.Group1Label" />
<!-- 图标。必需大小: 16、32、80,可选大小: 20、24、40、48、64。强烈建议为大 UX 提供所有大小。 -->
<!-- 使用 PNG 图标。资源部分中的所有 URL 必须使用 HTTPS。 -->
<Icon>
<bt:Image size="16" resid="Contoso.tpicon_16x16" />
<bt:Image size="32" resid="Contoso.tpicon_32x32" />
<bt:Image size="80" resid="Contoso.tpicon_80x80" />
</Icon>
<!-- 控件。可以为“按钮”类型或“菜单”类型。 -->
<Control xsi:type="Button" id="Contoso.TaskpaneButton">
<Label resid="Contoso.TaskpaneButton.Label" />
<Supertip>
<!-- 工具提示标题。resid 必须指向 ShortString 资源。 -->
<Title resid="Contoso.TaskpaneButton.Label" />
<!-- 工具提示标题。resid 必须指向 LongString 资源。 -->
<Description resid="Contoso.TaskpaneButton.Tooltip" />
</Supertip>
<Icon>
<bt:Image size="16" resid="Contoso.tpicon_16x16" />
<bt:Image size="32" resid="Contoso.tpicon_32x32" />
<bt:Image size="80" resid="Contoso.tpicon_80x80" />
</Icon>
<!-- 这是触发命令时的操作(例如单击功能区)。支持的操作为 ExecuteFunction 或 ShowTaskpane。 -->
<Action xsi:type="ShowTaskpane">
<TaskpaneId>ButtonId1</TaskpaneId>
<!-- 提供将显示在任务窗格上的位置的 URL 资源 ID。 -->
<SourceLocation resid="Contoso.Taskpane.Url" />
</Action>
</Control>
</Group>
</OfficeTab>
</ExtensionPoint>
配置好自己的东西之后,F5运行,Excel便会出现初始化好的项目,其中excel单元格里的内容是js写入的,具体如何写入,下文分解。右边侧栏则是需要开发的web项目。
第二、创建web项目,其实在新建项目时,web项目已经创建好了。可以在这个项目的基础上开发jQuery项目。如果不想用这个,也需要在此框架的基础上开发其他项目。web项目和加载项项目,是两个完全独立的项目,放在一起只是为了测试方便,web项目独立部署,只是如果你想要让web操作exce 的话,需要引入一些必要的文件与配置。
目前创建有四种web项目的结构。除了jQuery,其他均是目前流行的组件化开发
- Angluar
- Jquery
- React
- Vue
因为接下来要使用vue开发前端,所以删除原框架无用的东西,将整个web项目删掉。
因为我使用的是Vue,所以此处只介绍Vue搭建站点,其他三种方式去Office加载项官网
使用 vue-cli脚手架搭建项目,具体步骤就不写了,文档写的很详细参考
搭建好之后,运行vue项目,然后把xml文件里的~remoteurl,替换成你现在的项目地址就可以了。运行结果:
项目地址
Office加载项的更多相关文章
- Office加载项安装
出自我的个人主页 Alvin Blog 前言 Excel加载项离不开安装,Excel加载项本身安装及其简单,但这是在申请下来Office开发者账户之后,再次之前都得自行安装 线上安装 微软申请开发者账 ...
- Office加载项对Excel进行读写操作
转载自我的个人主页 前言 在开发ExcelWeb插件的时候,一大亮点就是可以在web项目中操作Excel,读取Excel的内容,也可以将服务端的数据写入的 Excel中,大大方便的用户使用Excel, ...
- office加载项部署清单签名的证书或其位置不受信任
异常信息: System.Security.SecurityException: 此应用程序中的自定义功能将不起作用,原因是用于为 BIMT写作指导 的部署清单签名的证书或其位置不受信任.请向管理员寻 ...
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
- word加载项打包发布注意事项总结
最近在做一个word加载项,发布的时候还是有很多坑的现在总结一下:发布工具为Advanced Installer 11.0 网盘地址:http://pan.baidu.com/s/1i4GK3g5 1 ...
- VSTO - 使用Excel加载项生成表和图表
此示例显示如何创建Excel的加载项,使用户可以在其工作表中选择库存符号,然后生成一个新工作表,显示库存的历史性能. 工作表包含数据表和图表. 介绍Excel加载项通常不知道工作表包含什么.典型的加载 ...
- IE加载项
加载项 加载项也称为ActiveX控件.浏览器扩展.浏览器帮助应用程序对象或工具栏,可以通过提供多媒体或交互式内容(如动画)来增强对网站的体验. 但是,某些加载项可导致计算机停止响应或显示不需要的 ...
- 教您如何在Word的mathtype加载项中修改章节号
在MathType数学公式编辑器中,公式编号共有五部分内容:分别是章编号(Chapter Number).节编号(Section Number).公式编号(Equation Number).括号(En ...
- 如何在word文档中添加mathtype加载项
MathType是强大的数学公式编辑器,通常与office一起使用,mathtype安装完成后,正常情况下会在word文档中的菜单中自动添加mathtype加载项,但有时也会出现小意外,mathtyp ...
随机推荐
- crm web ui
1:View中的field对应于model中的attribute. 2:custom controller具有更长的生存时间,能够在view中共享一些数据. 3:window是component的一个 ...
- CSS(十三).高度如何铺满全屏
该需求来源一次面试题. IE6不认识!important声明,IE7.IE8.Firefox.Chrome等浏览器认识:而在怪异模式中,IE6/7/8都不认识!important声明,这只是区别的一种 ...
- 老男孩python作业8-学员管理系统
学员管理系统开发: 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上 ...
- HDU - 1878 欧拉回路 (连通图+度的判断)
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是节点数 ...
- 线段树 区间更新(更新区间[x,y]的值,再求任意区间[x,y]的和)
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- 汉诺塔问题hdu 2065——找规律
这类题目就是纸上模拟,找规律. 问题描述:在一块铜板上有三根杆,目的是将最左边杆上的盘全部移到右边的杆上,条件是不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允 ...
- my.副本
梦幻西游手游 天蓬下凡 副本 第三关:天蓬终于决定要告白了,主怪大唐,护卫狮驼岭,帮凶是龙宫,打过这关也很简单. 第四关:康太尉找来了天兵,怪仍然是有法有攻,但是打起来也是不难. ZC: 姚太尉是物理 ...
- Vue自定义指令实现按钮级权限控制功能
思路: 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个token,拿到token之后(我会将这个token存贮到sessionStorage中,保证刷新页面后能记住 ...
- Django media的设置
django在定义模型时需要一些上传的文件,例如图片 class Banner(models.Model): """ 轮播图models titles 标题 images ...
- Spring---数据缓存(未完待续)
1.为什么需要数据缓存? 程序的瓶颈大都在数据库,而内存的速度是远远大于硬盘的,当我们需要重复读取相同数据时,一次又一次的请求数据库或者远程服务,导致大量的时间浪费在数据库或者 远程服务上,导致程序性 ...