记录Office Add-in开发经验
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
得益于微软系强大的共通能力和Visual Studio的开发支持,做Office插件不是什么难事。一点经验记录如下:
1. 如果要同时开发Word和Outlook插件,那么可将复用的代码封闭到独立的Library中。
2. 在可安装.NET Framework 4的系统上,可以嵌入WPF组件。
3. 由于Office的安全模型,安装部署里需要可信任证书的签名。
4. 初始化代码可在ThisAddIn添加,如Startup、Shutdown、Application.NewMailEx...
代码集锦
1. 获取文件名:
app = Globals.ThisAddIn.Application; Path.GetExtension(app.ActiveDocument.FullName)
2.检查文档是否保存:
app = Globals.ThisAddIn.Application;
if (!app.ActiveDocument.Saved)
{
if (MessageBox.Show("This command publish the disk version of a file to the server. Do you want to save your changes to disk before proceeding?", "warning",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
try
{
app.ActiveDocument.Save();
MessageBox.Show("save succeeded", "information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show("saved failed." + ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
3. 获取文档内容,并添加自己的信息
public byte[] GetDocumentContent(Word.Document wordDoc, string headerText, string footerText)
{
//使用Mail.RTFBody获取文档内容会丢失部分格式,所以这里还是采用剪贴板方式。
//复制文档内容到剪贴板
wordDoc.Content.Copy();
using (RichTextBox rtb = new RichTextBox())
{
//添加头部信息
rtb.AppendText(headerText);
rtb.SelectAll();
rtb.SelectionFont = new Font("Courier New", );
rtb.SelectionColor = Color.Green;
//添加正文
rtb.Select(rtb.TextLength, );
rtb.Paste();
Clipboard.Clear();
//添加尾部信息
rtb.SelectionFont = new Font("Courier New", );
rtb.SelectionColor = Color.Green;
rtb.AppendText(footerText);
using (System.IO.MemoryStream stream = new MemoryStream())
{
rtb.SaveFile(stream, RichTextBoxStreamType.RichText);
return stream.ToArray();
}
}
}
4. outlook邮件正文转换为word文档:
object selObject = currentExplorer.Selection[];
MailItem mail = selObject as MailItem;
if (mail == null)
{
MessageBox.Show("non-mail item not supported.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
Word.Document wordDoc = (Word.Document)mail.GetInspector.WordEditor;
资源下载
Office Control Identifiers: http://www.microsoft.com/en-us/download/details.aspx?id=6627
Office Document Extractor: http://code.msdn.microsoft.com/office/CSOfficeDocumentFileExtract-e5afce86
记录Office Add-in开发经验的更多相关文章
- 使用VS2012开发基于Office 2013的AddIn程序
默认VS2012开发的Office Add是基于2010的,如下所示: 如果你机器上安装的Office版本是2013,那么使用VS2012创建的工程是无法运行的,弹出如下的错误: 那么此时怎么办呢?将 ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章
上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...
- (1-1)文件结构的升级(Area和Filter知识总结) - ASP.NET从MVC5升级到MVC6
ASP.NET从MVC5升级到MVC6 总目录 MVC5项目结构 带有Areas和Filter的项目结构 一般来说,小的MVC项目是不考虑领域的,但是,如果是稍微复杂一点的项目,往往是需要领域这个概念 ...
- Python学习day3作业
days3作业 作业需求 HAproxy配置文件操作 根据用户输入,输出对应的backend下的server信息 可添加backend 和sever信息 可修改backend 和sever信息 可删除 ...
- csc.rsp Nuget MVC/WebAPI、SignalR、Rx、Json、EntityFramework、OAuth、Spatial
# This file contains command-line options that the C# # command line compiler (CSC) will process as ...
- Codeforces 307 div2 E.GukiZ and GukiZiana 分块
time limit per test 10 seconds memory limit per test 256 megabytes input standard input output stand ...
- 总结/PSP初体验—排球计分程序1.0
要做一个排球计分程序,墨迹了很长时间才做出个的东西,过程很不爽: 功能:这个软件有两个页面,可以实现窗体A的部分变化控制窗体B的部分变化.A是操作人员使用看到的,B是投放给观众的,完全由A操控: 学到 ...
- 我的git与github学习历程
因为想要知道如何把代码放到github上,所以就百度了一下,然后找到一个<如何从github上面拷贝源码>的文章,就先进行练习了下 1.首先到git官网下载git版本控制工具的安装包, ...
- 初探Backbone
Backbone简介 中文API:http://www.csser.com/tools/backbone/backbone.js.html 英文API:http://backbonejs.org/ B ...
随机推荐
- 简单爬虫,突破IP访问限制和复杂验证码,小总结
简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html 好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...
- sublime Text 3 安装emmet
Emmet简介 Emmet是一个支持大部分流行文本编辑器的插件,能够极大得提高编写HTML和CSS的工作效率. 官网:http://emmet.io/ 在Sublime Text 3中安装 前提Sub ...
- Ubuntu菜鸟入门(七)—— 微信安装
一.安装git sudo apt-get install git 设置自己的用户名和密码 sudo git config --global user.name "ABC" sudo ...
- eclipse调试
http://blog.csdn.net/u012176591/article/details/23297889
- 【powerdesigner】将pdm或者cdm保存为普通图片格式
1.首先全选或者选择你要保存的元素[Ctrl+A] 2.Edit---->Export Image
- XVI Open Cup named after E.V. Pankratiev. GP of Peterhof
A. (a, b)-Tower 当指数大于模数的时候用欧拉定理递归计算,否则直接暴力计算. #include<cstdio> #include<algorithm> #incl ...
- CSharp数据库代码生成工具
项目中遇到很多数据库表字段特别多的项目,手动一个一个去敲也不知道敲到什么时候,突发奇想做一个工具一劳永逸.花了一晚上做了这个东西,代码写的比较乱,用这个工具后减少了很多时间. Git地址:https: ...
- nginx下搭建CodeIgniter问题集锦
nginx环境下CodeIgniter会出现一些问题! 1.数据库驱动连接失败! 出现如下问题: A PHP Error was encountered Severity: Warning Messa ...
- JAVA多线程售票问题
//定义一个类实现Runnable接口,定义一个需要同步的售票方法,然后重写run方法调用售票的sale方法 class SaleTicket implements Runnable{ private ...
- html5shiv.js and respond.min.js
因为用到这两个插件,所以记录下来.. html5shiv:解决ie9以下浏览器对html5新增标签的不识别,并导致CSS不起作用的问题. respond.min:让不支持Css3 Media Quer ...