出自我的个人主页 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加载项的更多相关文章

  1. Office加载项安装

    出自我的个人主页 Alvin Blog 前言 Excel加载项离不开安装,Excel加载项本身安装及其简单,但这是在申请下来Office开发者账户之后,再次之前都得自行安装 线上安装 微软申请开发者账 ...

  2. Office加载项对Excel进行读写操作

    转载自我的个人主页 前言 在开发ExcelWeb插件的时候,一大亮点就是可以在web项目中操作Excel,读取Excel的内容,也可以将服务端的数据写入的 Excel中,大大方便的用户使用Excel, ...

  3. office加载项部署清单签名的证书或其位置不受信任

    异常信息: System.Security.SecurityException: 此应用程序中的自定义功能将不起作用,原因是用于为 BIMT写作指导 的部署清单签名的证书或其位置不受信任.请向管理员寻 ...

  4. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  5. word加载项打包发布注意事项总结

    最近在做一个word加载项,发布的时候还是有很多坑的现在总结一下:发布工具为Advanced Installer 11.0 网盘地址:http://pan.baidu.com/s/1i4GK3g5 1 ...

  6. VSTO - 使用Excel加载项生成表和图表

    此示例显示如何创建Excel的加载项,使用户可以在其工作表中选择库存符号,然后生成一个新工作表,显示库存的历史性能. 工作表包含数据表和图表. 介绍Excel加载项通常不知道工作表包含什么.典型的加载 ...

  7. IE加载项

    加载项   加载项也称为ActiveX控件.浏览器扩展.浏览器帮助应用程序对象或工具栏,可以通过提供多媒体或交互式内容(如动画)来增强对网站的体验. 但是,某些加载项可导致计算机停止响应或显示不需要的 ...

  8. 教您如何在Word的mathtype加载项中修改章节号

    在MathType数学公式编辑器中,公式编号共有五部分内容:分别是章编号(Chapter Number).节编号(Section Number).公式编号(Equation Number).括号(En ...

  9. 如何在word文档中添加mathtype加载项

    MathType是强大的数学公式编辑器,通常与office一起使用,mathtype安装完成后,正常情况下会在word文档中的菜单中自动添加mathtype加载项,但有时也会出现小意外,mathtyp ...

随机推荐

  1. List<T>中 GetRange (int index, int count)的使用

    GetRange:在源 List<T> 中创建元素范围的浅表复制. ; ) { List<T> uplist = new List<T>(); u++; <= ...

  2. mysql 常用函数。。

    FIND_IN_SET(str,strlist) ,strlist 是 一个 由 逗号 分割的字符串,要注意 strlist 不能有逗号.. 它 等于  where str in (1,2,3***) ...

  3. Flask&&人工智能AI -- 7 MongoDB

    MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器.“$”的奇妙用法,Array Object的特殊操作,选取跳过排序,客户端操作 一.MongoDB初识 什么是MongoDB Mong ...

  4. A. The number of positions

    A. The number of positions time limit per test 0.5 second memory limit per test 256 megabytes input ...

  5. 免费的mysql数据库

    https://blog.csdn.net/kernel_/article/details/53320498

  6. idea(2)快捷键

    Ctrl+E:最近编辑文件 Ctrl+J:自动代码快捷 Ctrl+N:查找类 Ctrl+U:大小写转换 Ctrl+F12:outline Alt+1:全屏 Alt+F1:类定位到左侧目录 Alt+In ...

  7. NET CORE Learning

    ASP.NET Core 基础教程https://www.cnblogs.com/lonelyxmas/tag/ASP.NET%20Core%20%E5%9F%BA%E7%A1%80%E6%95%99 ...

  8. scrapy 组合多个页面的数据一并存储

    暂不重复,请看参考信息 参考: https://segmentfault.com/q/1010000009651745/a-1020000009652641 https://www.jianshu.c ...

  9. 2018.6.1学习CSS5里顺丰盒子小问题

    在制作下面这样的小盒子时 编写的代码 首先要对li元素设置浮动. 在设置这个li元素下面的a元素时, 因为没有转行内块,inline-block,结果显示出来的页面,鼠标在经过这个选择时(:hover ...

  10. prototype.js

    (1)$() 方法是在DOM中使用过于频繁的 document.getElementById() 方法的一个便利的简写, 就像这个DOM方法一样,这个方法返回参数传入的id的那个元素. (2)