Tag: vsto

VSTO:在主Excel线程上调用

我有一个Excel工作表上的button,启动一个新的线程做一些处理。 如果我想对Excel进行任何更改(例如使用Worksheet.Range("A1").Value = "info"; )将数据写入单元格,我想我必须使用主UI线程。 如何才能做到这一点? 通常在Winforms中,我将在控件上调用Invoke ,但Excel.Application或Worksheet或Range对象没有Invoke方法。

Excel错误HRESULT:0x800A03EC尝试获取单元格名称的范围

我正在使用Window Service项目。 必须按顺序将数据写入Excel文件中。 但有些时候,有时候,服务抛出exception“exception从HRESULT:0x800A03EC”,而它试图获取单元格名称的范围。 我已经把打开excel表单的代码,并在这里获取单元格。 OS:窗口服务器2003 Office: Microsoft Office 2003 sp2 1:打开Excel表格 m_WorkBook = m_WorkBooks.Open(this.FilePath, 0, false, 5, "", "", true, Excels.XlPlatform.xlWindows, ";", true, false, 0, true, 0, 0); 2:让细胞写作 protected object m_MissingValue = System.Reflection.Missing.Value; Range range = m_WorkSheet.get_Range(cell.CellName, m_MissingValue); // error from this method, and cell name is string.

如何处理来自embedded式Excel.OleObjects或Excel.Shapes的事件

我正在处理旧的VBA程序的C#和VB.NET端口。 它有很多MSForms/OleObjectsembedded在它像CommandButton甚至图像。 我的第一个想法是将所有的button声明为Microsoft.Vbe.Interop.Forms.CommandButton但是导致COMexception, System._COM type不能转换为…Forms.CommandButton 。 如果我尝试一个更通用的解决scheme版本,我没有find任何项目,如果我尝试通过所有的VBComponet s我注意到,他们都是workbook中的workbook ,但没有控制: foreach (VBComponent xxx in Globals.ThisWorkbook.VBProject.VBComponents) { Interaction.MsgBox(xxx.Name); Interaction.MsgBox(xxx.ToString); } 因此,所有这些控件都不在.VBComponets ,但是我可以在这个工作簿中find它们作为OLEobjects thisworkbook.worksheets(n).OLEobjects (这与我是thisworkbook.worksheets(n).OLEobjects ,但我可能并不了解系统开始)。 如何处理来自这样的对象的点击操作? 我假设我需要使用Excel.OLEObjectEvents_Event接口,但我似乎无法弄清楚如何。 如果我尝试使用delegates进行自定义事件,我似乎无法将它们分配给OleObjects 。 如果我使用ActionClickEventHandler.CreateDelegate我可以得到各种各样的错误,使我认为这是一个死胡同。 来自MS的官方文档似乎并没有什么帮助,尽pipe它向我介绍了我正在研究的Verb的概念 。 到目前为止,只有“应用程序启动失败”才产生COM错误。 即使只是试图使用两个标准事件之一, .GotFocus ,我总是拉一个0x80040200错误。 例: Excel.OLEObject ButtonCatcher = Globals.ThisWorkbook.Worksheets(1).OLEObjects("CommandButton1"); ButtonCatcher.GotFocus += CommandButton1_Click; 抛出一个Exception from HRESULT: 0x80040200的COMException Exception from HRESULT: 0x80040200在第二行。 该button被启用,这是我从办公室dev站点查找代码后检查。 在包含控件的工作表的代码中尝试更通用的方法 : object CommandButtonStart […]

VBA VS. VSTO有什么区别,我应该升级吗?

我是KISS原则(保持简单)和Excel用户很长一段时间的VBA的狂热粉丝。 但是,我可以在VBA和VSTO(Visual Studio Tools for Office)上find的所有文章看起来都非常复杂。 首先,我厌倦了Excel中内置的非常差的IDE,我正在寻找一个新的IDE。 使用Visual Studio作为IDE的VSTO似乎是唯一的select。 所以我想了解VBA和VSTO之间的区别是否值得我学习使用VSTO?

如何知道一个单元格在C#中的公式中是否有错误

在Excel公式中,可以使用=ISERR(A1)或=ISERROR(A1) 在VBAmacros中,您可以使用IsError(sheet.Cells(1, 1)) 但是使用VSTO Excel Addin项目,我没有在Microsoft.Office.Interop.Excel API下find类似的function。 我只想知道单元格中是否有错误,我对错误types并不感兴趣。 我目前的解决方法是为所有现有的错误消息做到这一点: if (((Range)sheet.Cells[1, 1]).Text == "#N/A" || …) 有一个更好的方法吗。 在API中有一个简单的函数吗?

如何遍历Excel VBA或VSTO 2005中的所有单元格

我需要简单地通过Excel电子表格中的所有单元格,并检查单元格中的值。 单元格可能包含文本,数字或空白。 我不是很熟悉/舒适地使用“范围”的概念。 因此,任何示例代码将不胜感激。 (我曾尝试谷歌,但我发现的代码片段并没有完全做我所需要的) 谢谢。

如何使用VSTO / C#中的行号和列号来获取Excel范围?

我认为这个问题总结了一下。 给定行和列的两个整数或范围的两个angular的行和列的四个整数,如何获得该范围的范围对象。

实时(未保存的)Excel数据和C#对象之间的最快接口

我想知道什么是从一个打开的Excel工作簿读取和写入数据到c#对象的最快方式。 背景是我想开发从Excel使用的ac#应用程序,并使用Excel中保存的数据。 业务逻辑将驻留在C#应用程序中,但数据将驻留在Excel工作簿中。 用户将使用Excel,并在Excel工作簿上点击一个button(或者做类似的事情)来启动C#应用程序。 然后,C#应用程序将从Excel工作簿中读取数据,处理数据,然后将数据写回到Excel工作簿。 可能有许多数据块需要被读取并写回到Excel工作簿,但通常是相对较小的尺寸,例如10行和20列。 有时可能需要处理大量的数据列表,大约50,000行和40列。 我知道用VSTO做这个比较容易,但是我想知道什么是最快的(但仍然健壮和优雅)的解决scheme,并得到速度的想法。 我不介意解决scheme是否推荐使用第三方产品或使用C ++。 显而易见的解决scheme是使用VSTO或interop,但我不知道性能是什么样的,而我目前用来读取数据的VBA,或者是否有其他解决scheme。 这是张贴在专家交stream,说VSTO是比VBA慢得多,但那是几年前,我不知道是否performance有所改善。 http://www.experts-exchange.com/Microsoft/Development/VSTO/Q_23635459.html 谢谢。

如何引用Microsoft.Office.Interop.Excel DLL?

我已经开发了一个系统,在2006年使用MS VS 2005处理Excel表。现在,我不能使用与MS VS 2012相同的参考。 var app = new Microsoft.Office.Interop.Excel.Application(); Workbooks wbs = app.Workbooks;