Tag: vsto

在此之前确定VSTO 4中的Office版本。应用程序已设置

我想在Addin上调用CreateRibbonExtensibilityObject()时,确定VSTO Addin中Office / Excel的版本。 我遇到了这个问题,遇到了: 这个插件的应用是null ,这个时候还没有被VSTO设置。 ThisAddIn_Startup(..)在CreateRibbonExtensibilityObject()之后被调用。 this.Application.Version目前尚不可用,因为Addin似乎还没有初始化。 在VSTO运行时调用Addin中的CreateRibbonExtensibilityObject()时,有没有办法确定Excel( 12,14或15 )的版本? UPDATE 发现ItemProvider被实例化了,我用了以下来获得主要的办公版本。 FieldInfo temp = this.ItemProvider.GetType().GetField("_officeVersion", BindingFlags.NonPublic | BindingFlags.Instance); uint officeVersion = (uint)temp.GetValue(this.ItemProvider); 我也接受SliverNinja的回答。

在VSTO中获取Excel工作簿的Hashcode以启用基于状态的button

我正在创build一个VSTOfunction区AddIn for Excel,并且在我的应用程序中存储了一些工作簿状态信息,用于更新可视化button。 考虑到可以有多个工作簿,我将这个状态对象存储在ThisAddIn类的字典中。 我的问题是,我不知道如何得到一个独特的哈希/键/ Guid的工作簿,因为我得到的是一个COM包装不断改变散列。 够公平的,我完全明白这一点。 我已经使用了很长时间的一个解决scheme是创build一个GUID并将其存储在工作簿的CustomDocumentProperties中,并将基于此的状态映射为键。 这至less工作,但它失败,如果我创build工作簿的副本,并在相同的应用程序实例中打开,并具有相同的GUID多个工作簿。 现在我只是有一个想法,我想我可以在Workbook_Open事件上刷新这个Guid。 但是,这仍然是一个狡猾的解决scheme。 我在这里find第二个解决scheme: http : //social.msdn.microsoft.com/Forums/en-US/vsto/thread/04efa74d-83bd-434d-ab07-36742fd8410e/ 所以我用这个家伙的代码并创build了这个: public static class WorkbookExtensions { public static IntPtr GetHashery(this msExcel.Workbook workbook) { IntPtr punk = IntPtr.Zero; try { punk = Marshal.GetIUnknownForObject(workbook); return punk; } finally { //Release to decrease ref count Marshal.Release(punk); } } } 它在几分钟内运行得非常好,直到它开始向我提供访问Application.ActiveWorkbook时出现的臭名昭着的错误“已经与其基础RCW分离的COM对象不能使用”。 这是引用工作簿COM对象的安全方法吗? 如果我有两个function区应用程序都使用此方法来获取单个工作簿GUID? 如果其中一个应用程序在我的状态对象上运行垃圾收集器,它会调用一个终结器来调用Marshal.FinalReleaseComObject(workbook)? […]

VSTO Excel 2007:在加载项中包含或embedded工作簿/工作表

我想在Excel加载项中包含/embedded带有预定义布局的Excel工作表,但是我不能将项目项目“工作簿”添加到我的VSTO项目中,也不能添加对“Excel工作簿”项目的引用。 那我该怎么做呢? 我的目标是build立一个Excel加载项,它将一个新的工作表添加到现有的工作簿(这是从SAP下载)来聚合数据。 斯文

将HRESULT转换为可读的消息

任何人都可以提供一些有关如何以编程方式将HRESULT( http://en.wikipedia.org/wiki/HRESULT )值转换为人类可读的消息的信息? 我知道实用程序ERR.EXE这样做,但我的应用程序需要显示一些有意义的消息给我的用户,而不是一个神秘的0x800A03EC。

实现可以asynchronous调用Web方法的Excel UDF

最初,我实现了一个可以同步调用Web方法的UDF,但是却遇到了很多麻烦,特别是当我试图请求大量数据时 – 简而言之, Excel会挂起并冻结,直到检索到所有数据严重危害用户体验。 我猜测同步使用Web服务是真正的杀手锏。 所以我想知道是否有任何方法可以asynchronous执行 ? 任何人都可以给我一些指针? 任何工具或平台更受欢迎? (我个人更喜欢使用C#)

在Excel VSTO中,如何检查工作表是否属于已closures的工作簿?

如果我有Worksheet的引用,并closures它的父Workbook ,引用不会消失。 但我无法弄清楚我应该如何检查以确保这些表不存在。 检查null不起作用。 例: Workbook book = Globals.ThisAddIn.Application.ActiveWorkbook; Worksheet sheet = (Worksheet)book.Worksheets[1]; // Get first worksheet book.Close(); // Close the workbook bool isNull = sheet == null; // false, worksheet is not null string name = sheet.Name; // throws a COM Exception 这是我尝试访问工作表时遇到的exception情况: System.Runtime.InteropServices.COMException was caught HResult=-2147221080 Message=Exception from HRESULT: 0x800401A8 Source=MyProject ErrorCode=-2147221080 StackTrace: […]

简化excel单元格列表以创build一个Range

我想从dynamic生成的单元格引用列表中创build一个Excel.Range对象。 Excel.Range outputRange = sheet.get_Range(strCellRange, Type.Missing); 由于strCellRange可能会变得很大,因此会给出例外。 所以我想简化它与范围符号的联合。 例如 string strCellRange = "F2,G2,H2,I2,J2,K2,L2,F7,G7,H7,I7,J7,K7,L7,F12,G12,H12,I12,J12,K12,L12,F17,G17,H17,I17,J17,K17,L17,F22,G22,H22,I22,J22,K22,L22,F27,G27,H27,I27,J27,K27,L27"; 至 string strCellRange = "F2:L2,F7:L7,F12:L12,F17:L17,F22:L22,F27:L27"; 是否有任何Excel方法创build一个具有很多单元格引用的Range对象? 有一个已知的algorithm来实现上述简化(matrixalgorithm)?

VSTO Excel Workbook外接程序无法通过1台计算机上的Visual Studiodebugging程序加载

我有一个VSTO Excel工作簿项目,我可以在我的笔记本电脑上很好地debugging。 项目解决scheme还在另一台计算机上访问了一些特殊的硬件,并且该项目昨天在VS2010中正在进行debugging。 今天,它停止在这台计算机上debugging的Excel挂钩。 F5启动Excel,但加载项不会加载Workbook启动事件中的断点等等…版本控制的相同项目在我的笔记本电脑上debugging良好,所以这台计算机上的Excel或VS会有什么问题。 我似乎在VSTO日志logging和重置Excel相关的一些相关的笔记/post,但有什么打击他们的头呢? 更新:这个解决scheme没有为我工作。 当我打字的时候,我发现了这个相似和有希望的标题… 当在Visual Studio 2010的debugging模式下运行时,Excel不会打开/启动VSTO AddIn

使用VB.NET将项目添加到function区下拉列表

我是开发Excel VSTO解决scheme的新手,需要一些关于如何将更多的项目添加到function区上的下拉控件的帮助。 到目前为止,我已经能够手动创build多个项目,然后使用更改这些项目的标签 Globals.Ribbons.Ribbon1.DropDown1.Items(i).Label 此外,我发现一些build议使用这个添加更多的项目到下拉控件。 但是我很难理解如何使用它。 Globals.Factory.GetRibbonFactory.CreateRibbonComboBox.Items.Add 我想看看其他人如何做的样本。

在Excel VBA中加快处理注释

这是我devise的一个例子,我创build这个来解释我遇到的问题。 基本上我想要这个代码比它运行得更快。 在新的工作表中,每个单元格的循环都会快速启动,但是如果让它运行到接近完成状态,然后再次运行,则每个单元格将会达到100ms。 在我的工作表中,我有16000个单元,有很多这样的注释,每次代码运行时都会单独操作。 在这个例子中,它们显然是一样的,但在实际应用中,每一个都是不同的。 无论如何要使这个过程更快? Option Explicit Public Declare PtrSafe Function GetTickCount Lib "kernel32.dll" () As Long Public Sub BreakTheCommentSystem() Dim i As Integer Dim t As Long Dim Cell As Range Dim dR As Range Set dR = Range(Cells(2, 1), Cells(4000, 8)) Dim rStr As String rStr = "ABCDEFG HIJK LMNOP QRS TUV […]