Tag: vsto

模拟对象没有Intellisense中显示的所有属性 – 在一个项目中但在另一个项目中有它们

我在嘲笑VSTO对象,在一个项目中(我没写),它有这样的代码: var listOfSheets = new List(); var mockSheets = Substitute.For(); mockSheets.Count.Returns(listOfSheets.Count); mockSheets的Intellisense ToolTip显示了6个属性: 具有断点的线在此项目中起作用。 但是我在不同的项目中使用相同的代码(相同的引用,名称空间等),但是mockSheets的Intellisense ToolTip只显示1个属性: 我知道这是我试图解决的根本原因,但实际问题是: 无法对空引用执行运行时绑定 编辑: Sheet对象被模拟: public static Worksheet Sheet { get { var mockSheet = Substitute.For(); mockSheet.Name = MockSheetName; mockSheet.Visible = XlSheetVisibility.xlSheetVisible; return mockSheet; } } public static Workbook Workbook() { return Workbook(1); }

如何以编程方式在Outlook搜索文件夹上设置自定义图标? (即Outlook文件夹SetCustomIcon)

我正在尝试使用Folder.SetCustomIcon()方法在我以编程方式创建的已保存搜索文件夹上放置自定义图标。 SetCustomIcon()文档非常稀疏,但可以在此处找到以供参考 。 此外, 它期望的对象是一遍又一遍的例子是非常稀疏的。 有人知道如何设置文件夹的自定义图标吗? 以下是我到目前为止的代码: searchFolders = inboxFolder.Store.GetSearchFolders(); foreach (Outlook.Folder folder in searchFolders) { if (folder.Name == “Expiring Retention Policy Mail”) { folder.ShowItemCount = Microsoft.Office.Interop.Outlook.OlShowItemCount.olShowTotalItemCount; folder.SetCustomIcon(new Bitmap(32, 32)); // <=– this isn't working because it's expecting stdPicture which has very sparse information on how to convert to this type. Globals.ThisAddIn.Application.ActiveExplorer().CurrentFolder = folder; } […]

Outlook中“已发送邮件”上的事件

我正在使用ApplicationEvents_11_ItemSendEventHandler (请参阅http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspx )在从Outlook发送项目时进行一些处理。 但是,由于此事件触发“发送”而不是“已发送”,我无法获取某些信息,例如发件人,发送时间等。 物品实际发送后是否会触发另一个事件? 我读过这篇博客文章; http://easyvsto.wordpress.com/2010/07/27/how-to-save-mail-content-when-a-mail-is-sent-from-outlook/但我对依赖出现的物品持谨慎态度在sent items文件夹中,考虑到用户可以禁用此function。 编辑:我应该补充一点,我实际上已经尝试了“观察已发送的项目文件夹”的方法,并注意到ItemAdd事件似乎只发送我发送的第一封电子邮件,然后再重新启动Outlook。 我的代码如下; var sentMail = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail); sentMail.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd); 我的方法…… void Items_ItemAdd(object item) { MessageBox.Show(((Outlook.MailItem)item).Subject); }

Outlook 2007 vsto加载项。 获取电邮发件人地址

我有一个VSTO Outlook 2007加载项。 当新邮件进入收件箱时,我正在尝试获取发件人电子邮件地址。 为此,我使用以下代码: void inboxItems_ItemAdd(object Item) { Outlook.MailItem mailItem = Item as Outlook.MailItem; if (mailItem != null) string emailAdress = mailItem.SenderEmailAddress; } 问题是当电子邮件来自同一个域时,emailAdress包含类似的LDAP地址 / O =第一个组织/ OU =第一个行政组/ CN =收件人/ CN =管理员 虽然我想获得像这样的SMTP地址 administrator@orgname.com 我的问题是如何从内部域获取电子邮件的SMTP发件人地址? PS 在Outlook 2010中,可以使用Sender属性解决此问题。 但它在2007年不受支持。 item.Sender.GetExchangeUser().PrimarySmtpAddress

以编程方式为Outlook 2010创建自定义通讯簿

我想创建一个自定义联系人列表 ( 或称为通讯录 ),以便在Outlook中用户将查看“建议的联系人”,“联系人”等,然后是“自定义联系人”。 我走了,试了以下。 int count = this.Application.GetNamespace(“MAPI”).AddressLists.Count; 这给了我8的值。所以,当然,我试图在地址列表对象中Add一些东西,但猜猜是什么 – 没有这样的方法。 这并不奇怪,因为API明确指出它是只读对象。 但是,我需要为我的客户设置一个地址簿/列表( 无论它叫什么 )。 如何向Outlook添加新的通讯簿 ?

如何从其他c#项目中调用VSTO类

在我的解决方案中,我有2个项目。 一个是控制器,在最终产品中用于检查是否从控制台/非用户输入发出执行,因此将基于来自xml文件的输入执行所需的后台更改,或者执行是否由用户输入,将打开一个界面。 一个非用户输入可能是一个计划任务或类似的东西,但那是现在的另一个时间,我只是写了一些上下文。 在这两种情况下,迟早都需要访问word文档以及读取,写入和更改文档属性。 为此,我创建了一个带有所需function的VSTO-Word-Addin,到目前为止,我对路径进行了硬编码,并且没有将结果返回到其他文档以外的任何地方。 由于我确信我的VSTO代码本身有效,我想将原型扩展到下一级并尝试在控制台和VSTO之间添加连接。 为了测试我稍微简化了过程,只是尝试在没有任何用户输入的情况下建立控制台和VSTO之间的连接,并尝试执行一些方法来测试我的VSTO的function。 我的方法是打开控制台,然后打开Word /插件,打开隐藏的文件并做魔术。 首先要做的是设置要打开的文档的路径,然后使用返回的值调用多个方法。 在这种情况下,我的VSTO返回true SetCustomProperty 和一个新的元组列表 GetCustomProperties 这些是占位符,将在开发中被替换。 我已经尝试了一些可能的解决方案,但是大多数都是从VSTO启动WinForms / WPF / Console或尝试从其AddIn调用其他AddIn。 我最成功的方法就是这个: MSDN从其他Office解决方案的VSTO加载项中调用代码 但当然这是办公室所以我遇到了无法使用的问题 Globals 有关Globals的更多信息,请访问MSDN 所以也许我错过了这一点并且只是盲目的,但我如何从控制台调用VSTO项目中的类? 以下是我当前失败的一些代码示例: 具有我想要访问的已使用接口的类: [ComVisible(true)] public interface IPropertyReadWriter { bool Open(string Path); bool SetCustomProperty(String Name, PropertyTypes Type, object Value); List<Tuple> GetCustomProperties(); } [ComVisible(true)] public class PropertyReaderWriter : IPropertyReadWriter { public List<Tuple> […]

VSTO Word 2016:Squiggly下划线而不影响撤消

我正在开发一个实时语言分析工具,需要使用VSTO加载项(使用C#编写的.NET4.6.1编写)突出显示Word 2016中编写者的注意力。 想一想语法/拼写检查,它会在单词下面添加一条波浪线,表明单词有语法错误或拼写错误。 我正在为我自己定义的一些规则添加一个类似的function。 我搜索了添加波浪线,并偶然发现Font.Underline和Font.UnderlineColor 。 我把它设置在一个单词的范围内,似乎提供了我想要吸引注意力的视觉效果。 但是有一个问题。 我添加或加下划线颜色的每个下划线都会向撤消堆栈添加撤消操作。 我不希望这种情况发生,或者我想要一种方法来弹出我刚才在堆栈代码中执行的操作。 目的是让用户能够使用CTRL + Z删除他更改的文本 ,而不会影响我的语言分析结果。 我该怎么做呢?

如何将图像用作PictureBox的源后从文件夹中删除?

链接到我之前提出的问题背景 我通过以编程方式更改保存附件的临时文件夹中的图像来回答我自己的问题。 在修复我认为与前者过于分离的问题时,这给我带来了一个新问题。 当我的程序关闭时,我会删除临时目录中的图像。 由于我点击不同的图像后,预览工作正常。 尝试关闭程序时出现以下错误(在此事件中删除图像): 该进程无法访问文件’c:\ temp \ DigitalArchive \ FILENAME.jpg’,因为它正由另一个进程使用。 所以我试图通过清除临时文件夹中的图片来解决它: if (picAttachPreview.Image != null) { picAttachPreview.Image.Dispose(); picAttachPreview.Refresh(); } //Runs through each file in the temporary directory and removes them to clear folder foreach (string item in Directory.GetFiles(tempfolder)) { File.Delete(item); } 编辑:我觉得我应该显示图像更新的位置以供参考: if (chkAttachments.Text.Contains(“.jpg”)) { var selectedImage = chkAttachments.Text; picAttachPreview.Image = Image.FromFile(Path.Combine(tempfolder, selectedImage)); […]

如何将C#类公开给文档级外接程序中的VBA模块?

这是一个假设的情况。 我想知道是否可以在文档级外接程序中将C#类暴露给VBA。 这是一个SSCCE: 在VS PRO 2012中,我启动了一个新项目, 选定办公室 – > Excel 2010工作簿 。 ( 确保选择.Net framework ver 4 ) 我已向Sheet1添加了DateTimePicker控件。 我可以在C#解决方案中的DateTimePicker控件中设置/获取.Value属性而不会出现问题。 在调试时:在VBA中, 不公开.Value属性。 ( 试过.OLEFormat.Object.Value ) 并非所有属性都可以向VBA公开,因为ActiveX控件DateTimePicker由MSForms包装,因此Excel可识别它(兼容性)。 我需要能够从VBA获取包装控件的实际值,但我不确定如何去做( 是否可能 )… 我知道控件本身支持事件,但这不是我想要的路径。 我希望能够从控件中获取静态/当前值。 这是我希望能够做到的: 在我的C#解决方案中添加一个类 公开它,所以它可以从像Dim obj as new MyExposedClass这样的VBA Dim obj as new MyExposedClass 然后让MyExposedClass存储对DateTimePicker引用,因为它出现在C#中(所有属性都可用) 然后我可以定义一个函数GetValue(string controlName) ,它返回C#POV中的Value 所以我发现这个解决方案 +( 这个 )似乎适用于应用程序级外接程序,但它不适用于文档级外接程序。 当我调试我的解决方案并打开VBA的对象浏览器时,我可以看到引用被自动添加到Microsoft Visual Studio 2008 […]

VSTO 2007:如何确定范围的页面和段落编号?

我正在构建一个MS Word加载项,它必须从文档中收集所有评论气球并在列表中汇总它们。 我的结果将是一个ReviewItem类列表,其中包含Comment本身,段落编号和注释文本所在的页码。 我的部分代码如下所示: private static List FindComments() { List result = new List(); foreach (Comment c in WorkingDoc.Comments) { ReviewItem item = new ReviewItem() { Remark = c.Reference.Text, Paragraph = c.Scope. ???, // How to determine the paragraph number? Page = c.Scope. ??? // How to determine the page number? }; result.Add(item); } return […]