天道酬勤,学无止境

vsto

在文档级自定义中从 Windows 窗体引用 Excel 工作表(Referencing an excel sheet from a Windows Form in Document Level Customization)

问题 我想我会尝试学习 VB.net 并从一些 VSTO (VS2012) 开始。 我正在尝试使用单独的 Windows 窗体(加载时显示)进行 Excel 文档自定义。 我可以在加载文档时打开表单。 我在 MSDN 上的文档中找到了很多关于如何将 Windows 窗体控件放入的示例(并想出了如何做到这一点),但是我无法从 Windows 窗体中引用 Excel 文档的部分内容。 因此,例如在名为 Main Control 的 windows 窗体上,我尝试将此子添加到按钮: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try Dim baba As Sheet1 baba.Cells(1, 2).Value = "Llaslmasd" Catch ex As Exception MsgBox(ex.Message) End Try End Sub 我也试过: Dim baba As New Sheet1 和 Dim baba As WorkSheet baba = Sheet1 如果它不是共享成员,或者如果我应该让它共享,那么引用工作表的正确方法是什么,我该怎么做? 如果我以编程方式尝试从其他(非合并工作簿并因此更改工作表索引?)插入工作表,事情会中断吗?

2021-09-25 02:14:42    分类:技术分享    vb.net   visual-studio   excel   vsto   add-in

使用句柄 HWND 将 Caliburn IWindowmanager 的所有者属性设置为 Excel(Setting Caliburn IWindowmanager's Owner Property to Excel with handle HWND)

问题 我有一个 Excel Vsto 插件应用程序,我在其中托管使用​​ Calibrun Micro Autofac 构建的 WPF 应用程序。我有一个弹出 excel 的对话框,我希望将弹出窗口的所有者设置为此 excel 窗口。我认为这样做的唯一方法是使用需要 Window 实例的 WindowInteropHelper 类。 我正在使用这样的设置: dynamic settings = new ExpandoObject(); 我显示这样的窗口: windowManager.ShowDialog(viewModel, settings: settings); 那么我该怎么做才能将 settings.Owner 属性设置为这个 excel 窗口(其句柄已知),以便弹出窗口始终位于 excel 窗口之上? 回答1 看起来您在 Excel 中托管了一个 WPF 应用程序(加载项),它是一个 Office 应用程序,而 Caliburn.Micro 在BootstrapperBase类中有一个完全适合这种情况的构造函数,它看起来像这样: BootstrapperBase(useApplication = true) ,所以你应该从BootstrapperBase派生您的引导程序并将false传递给基本构造函数。 像这样: class MyBootstrapper

2021-09-24 05:06:19    分类:技术分享    excel   vsto   caliburn.micro

Referencing an excel sheet from a Windows Form in Document Level Customization

I thought I'd try to learn VB.net and start with some VSTO (VS2012). I'm trying to do an Excel Document Customization with a separate Windows Form in it (.show on load). I can get the form to open on loading the doc. I found lots of examples of how to put Windows Form Controls in the document on MSDN (and figured out how to do that), but I'm having trouble referencing parts of the Excel document from the Windows Form. So for example on the windows form called Main Control I tried to add this sub to a button: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try

2021-09-24 05:02:19    分类:问答    vb.net   visual-studio   excel   vsto   add-in

Setting Caliburn IWindowmanager's Owner Property to Excel with handle HWND

I have an Excel Vsto addin application in which I host WPF application build using Calibrun Micro Autofac.I have a dialog popping up the excel and I want that Pop up window's Owner to be set to this excel window.Only way I see doing this is using WindowInteropHelper Class which needs Window instance. And I am using settings like this : dynamic settings = new ExpandoObject(); And I show window like this : windowManager.ShowDialog(viewModel, settings: settings); So What should I do to set the settings.Owner Property to this excel window(Whose Handle is known) so that the Pop up window is always

2021-09-23 21:03:27    分类:问答    excel   vsto   caliburn.micro

C# Outlook 2013 外接程序键盘事件(C# Outlook 2013 Add-In Keyboard Events)

问题 我正在使用自定义快捷方式,但我面临的问题是,当 Outlook 2013 聚焦时,关键事件不会触发(2007 年和 2010 年工作正常)。 到目前为止,我已经尝试了不同的解决方案。 这似乎是迄今为止最好的,以下代码是一个全局钩子。 [DllImport("user32.dll")] static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId); [DllImport("user32.dll")] static extern bool UnhookWindowsHookEx(IntPtr hInstance); [DllImport("user32.dll")] static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam); [DllImport("kernel32.dll")] static extern IntPtr LoadLibrary(string lpFileName); private delegate IntPtr LowLevelKeyboardProc(int nCode

2021-09-23 14:17:28    分类:技术分享    events   outlook   key   vsto   add-in

加快在 Excel VBA 中使用注释的速度(Speed Up Working With Comments in Excel VBA)

问题 这是我设计的一个例子,我创建它是为了解释我遇到的问题。 基本上我希望这段代码运行得比它快。 在一个新工作表上,一个单元格的每个循环开始得很快,但是如果让它运行到接近完成,然后再次运行它,每个单元格将达到 100 毫秒。 在我的工作表中,我有 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 WX YZ" & Chr(10) For i = 1 To 5 rStr = rStr & rStr Next i For Each Cell In dR t = GetTickCount

2021-09-22 00:53:43    分类:技术分享    vba   excel   excel-2010   vsto

单元测试 VSTO 项目(Unit Testing VSTO projects)

问题 在我遵循的大多数单元测试教程中,它让我创建第二个单元测试项目,然后将测试项目中的解决方案/项目引用添加到另一个项目。 我有一个 VSTO 插件,当我添加参考时,我没有看到解决方案 > 项目下列出的任何内容。 为什么是这样? 我还能如何添加对插件项目的引用来测试它? 回答1 如果这是您第一次进行单元测试,那么 VSTO 可能是一个陡峭的学习曲线。 正如@Sam Holder 所建议的那样,您可能希望将一些逻辑放入单独的程序集中,以鼓励您将逻辑与与办公基础设施的交互分开。 也就是说,虽然您不能使用添加对项目的引用的正常方法来添加项目,但您可以使用“ Browse选项添加对该项目输出的引用: 右键单击测试项目并选择“添加引用”。 在出现的框中,单击底部的“浏览”按钮。 导航到 VSTO 项目的 bin\debug 文件夹并选择项目 dll。 单击确定。 显然,您必须构建插件才能使上述内容正常工作。 如果您开始尝试创建依赖于办公基础设施的对象,您将面临一些其他挑战。 因此,您可能至少需要将Microsoft.Office.Tools 、 Microsoft.Office.Tools.Common引用添加到您的测试项目中。 回答2 我不知道为什么添加引用不起作用,但您可以通过添加第三个项目来解决它。 将所有逻辑放在这个新项目中。 在测试中添加对这个新项目的引用,然后在 VSTO

2021-09-21 15:37:12    分类:技术分享    c#   unit-testing   vsto

如何在 CustomTaskPane VSTO C# 中的 UserControl 中公开列表框(How to Expose Listbox in UserControl in CustomTaskPane VSTO C#)

问题 我正在使用 C# VSTO 为 Word 2010 创建应用程序级加载项。 我创建了一个用户控件,在其中放置了控件,然后使用用户控件添加了一个自定义任务窗格: UserControl myUserControl; myUserControl = new PageElementsPane(); mytaskPane = this.CustomTaskPanes.Add (myUserControl, "Page Elements", doc.ActiveWindow); 到现在为止还挺好。 但是,用户控件包含一个列表框,在将自定义任务窗格添加到自定义任务窗格集合后,我无法访问该列表框。 我曾尝试将列表框上的 Modifiers 属性设置为 Public。 我曾尝试将用户控件上的列表框公开为公共属性: public partial class PageElementsPane: UserControl { public ListBox ElementsPaneListBox { get { return lbxListbox; } } } 此外,我查看了这篇 SO 帖子: 在用户控件中使用 ListBox 元素 我希望我能适应它,但我的列表框 IntelliSense 没有FindControl ,而是提供FindForm 。

2021-09-21 08:37:16    分类:技术分享    c#   ms-word   vsto

有效地获取格式化的单元格值(Get Formatted Cell Values efficiently)

问题 我希望能够有效地从 Excel 中检索格式化单元格值的多维数组。 当我说格式化的值时,我的意思是我想得到它们在 Excel 中出现的样子,并且应用了所有的单元格 NumberFormat。 Range.Value 和 Range.Value2 属性非常适合将大量单元格的单元格值检索到多维数组中。 但这些是实际的单元格值(至少对于 Range.Value2 是这样,我不太确定 Range.Value 对某些值做了什么)。 如果我想检索单元格中显示的实际文本,我可以使用 Range.Text 属性。 这有一些警告。 首先,您需要自动调整单元格,否则如果当前单元格宽度并非所有文本都可见,您可能会得到类似 #### 的内容。 其次,Range.Text 一次不能处理多个单元格,因此您必须遍历范围内的所有单元格,这对于大型数据集来说可能非常慢。 我尝试的另一种方法是将范围复制到剪贴板,然后将剪贴板文本解析为制表符分隔的数据流,并将其传输到多维数组中。 这似乎很有效,虽然它比获取 Range.Value2 慢,但对于大型数据集来说,它比获取 Range.Text 快得多。 但是,我不喜欢使用系统剪贴板的想法。 如果这是一个很长的操作,需要60秒,而操作正在运行,用户可以决定切换到另一个应用程序,并会很不高兴地发现自己的剪贴板中不起作用或有神秘的数据。

2021-09-20 15:18:44    分类:技术分享    c#   excel   vba   vsto   clipboard

VSTO AssemblyResolve issue(VSTO AssemblyResolve issue)

问题 我们为 Word 开发了一个 VSTO 插件,我们遇到的问题是插件的最早入口点是 AddIn_Startup 处理程序。 问题是对于我们实现的 AssemblyResolve 处理程序来说,这个处理程序被调用得太晚了,无法找到所需的程序集。 我通过将处理程序分配给 Addins.Designer.cs 类中的 AppDomain.CurrentDomain.AssemblyResolve 事件来解决这个问题,但众所周知,此代码是自动生成的。 有没有办法在 AddIn_Startup 处理程序和非自动生成的文件中更快地分配 AssemblyResolve 处理程序? 回答1 请注意,您开发的是一个插件,而不是一个独立的应用程序,您可以在运行时管理引用并执行任何您需要的操作。 您可以考虑将绑定信息添加到应用程序配置文件(在您的情况下,它将是 Word.exe.config)。 回答2 您可以在 AddIn_Startup 代码中添加处理程序。 代码在 VB.net 中。 AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolver 回答3 我刚刚遇到了这个问题,通过搜索来到这里,然后查看了 VSTO Microsoft.Tools AddinBase 类(我希望这是正确的链接)。

2021-09-20 04:14:22    分类:技术分享    .net   vsto   assemblyresolve