Tag: vsto

如何以编程方式从Excel单元拖放到启用拖拽的任务窗格?

我正在使用Excel 2007,VS2008 Pro。 我正在构build一个需要“从Excel单元格拖放到启用了拖动的任务窗格”的VSTO加载项。 到目前为止,我注意到我只能在单元格内拖放。 它不允许我拖放到任务窗格或拖过表单限制。 (http://www.computerimages.com/tip_xl.html) 注:任务窗格已启用拖放,我已经testing过,我可以从任务窗格拖放到Excel,但我需要这样做,反过来呢?

parsing大型Excel文件列表失败

这是一个C#/ VSTO程序。 我一直在做一个数据捕获项目。 范围基本上是“处理各种第三方公司发送的Excel文件”。 实际上,这意味着: 通过search方法find包含我想要的数据的列。 从工作簿中获取数据 清理数据,运行一些计算等 将清理的数据输出到新的工作簿中 我写的程序对于中小型数据集非常有用,大约有25个工作簿,总共有大约1000行相关数据。 我从这些工作簿中抓取了7列数据。 我有一个边缘案例,有时候我需要运行一个更大的数据集,大约50个工作簿,共有约8000行相关数据(可能还有2000个重复数据,我也必须删除)。 我目前正在通过一个Parallel.ForEach循环里面的文件列表,我打开一个new Excel.Application()处理每个文件与多个ActiveSheet s。 在较小的数据集上,并行处理的运行速度要比顺序处理的要快得多。 但是在更大的数据集上,我似乎碰壁了。 我开始收到消息: Microsoft Excel is waiting for another application to complete an OLE action ,最终它只是失败。 切换回顺序foreach确实允许程序完成,但它只是磨合 – 从1至3分钟的平行中等规模的数据集到20分钟以上的连续大型数据集。 如果我把ParallelOptions.MaxDegreeOfParallelism设置为10,它会完成这个循环,但是仍然需要15分钟。 如果我将它设置为15,则失败。 如果我不需要,我也不喜欢弄乱TPL设置。 我也尝试过插入一个Thread.Sleep来手动减慢速度,但是这只会让失败发生。 我closures工作簿,退出应用程序,然后将GC.WaitForPendingFinalizers到每个循环结束时的Excel对象和GC.Collect和GC.WaitForPendingFinalizers 。 我现在的想法是: 将列表分成两半,分别运行 并行打开一些new Excel.Application() ,但是在该Excel实例内依次运行一个文件列表(有点像#1,但使用不同的path) 按文件大小分开列表,并独立/按顺序运行一小组非常大的文件,像以前一样运行其余的文件 我希望得到一些帮助: 关于如何确保我的记忆被清除的build议(也许Process.Id在所有的开始和结束都被扭曲了?) 关于订购一个并行stream程的build议 – 我想知道如果我能把这个“大”的人放在第一位,这将使长期运行的stream程更加稳定。 我一直在看: http : //reedcopsey.com/2010/01/26/parallelism-in-net-part-5-partitioning-of-work/ […]

直接绘制到Excel单元格canvas

有没有办法使用VSTO直接绘制图像到包含Excel单元格的canvas,而不必插入形状? 我已经看到了,我知道这是可能的,我似乎无法find信息来源。 Range cell = sheet.Cells[1, 1]; var border = cell.Borders[XlBordersIndex.xlDiagonalDown]; border.Weight = XlBorderWeight.xlThin; border.LineStyle = XlLineStyle.xlContinuous; 这个代码片段似乎在单元格的canvas内产生一个graphics。 我需要访问这个绘制的图层。

为所有的Excel版本构build一个加载项和UDF

一个数据提供者想要开发一个Excel加载项,这些都是要求: 1)它可以安装在桌面上。 它在function区中添加了一个菜单和button,还提供了一些特定的function(获取实时数据,如彭博function)。 2)插件应该在Excel 2007,2010,2013和2016中工作。 问题是应该使用哪种技术来创build这个加载项。 这是我的一些想法: 1)Excel的JavaScript API不适用,因为它不适用于Excel 2007,2010。 2)VSTO。 有谁知道VSTO插件是否适用于Excel 2013和2016? ; 是否有可能build立一个适用于所有Excel 2007,2010,2013和2016的VSTO加载项? 3)Excel的C API。 看来C的Excel for Excel是用来构buildXLL的。 有谁知道如果Excel的C API可以build立菜单和button?

Excel中的表格与VSTO

如果这是一个新手问题,我真的对VSTO很陌生。 我正在处理一个数据录入应用程序,我需要让用户将数据导入到Excel表格中(例如,当您突出显示一堆行并点击“格式化表格”),然后我需要从中读取数据表,并在C#中使用它。 在基本的层面上,我已经有了一些C#模式。 我需要在Excel中以这种格式创build一个表(Column Names + Validation rules on the types。某些types是枚举,所以我认为我需要在所有枚举值的另一个表上创build一个列表,并指定绑定列表)。 一旦表格被创build,用户就会input数据,当他们closuresexcel时,我读取数据。 我已经想出了如何使用原始单元格,但是我一直无法创build表格或validation规则。 有任何想法吗? 另外,在哪里可以find一些关于excel VSTO编程的好资源? 谢谢, 罗伊

从代码中调用Excelmacroslogging器

我需要一种以编程方式在Excel中启动macroslogging器的方式,并为将要创build的新macros提供名称。 这可以来自VSTO或VBA,或使用Office互操作程序集。 任何想法如何可以完成?

名称空间“Microsoft.Office.Tools.Excel”中不存在types或名称空间名称“Extensions”

Visual Studio 2010 VSTO Excel 2007外接程序项目。 试图在Visual Studio中构build解决scheme我得到以下内容: The type or namespace name 'Extensions' does not exist in the namespace 'Microsoft.Office.Tools.Excel' (are you missing an assembly reference?) 该项目引用以下程序集:C:\ Program Files \ Reference Assemblies \ Microsoft \ VSTO \ v9.0 \ Microsoft.Office.Tools.Excel.v9.0.dll 在我的机器上,这个程序集是Product Version 9.0.21022.8。 在项目成功build立的其他开发者机器上,程序集是Product Version 9.0.30729.1。 我需要安装什么来升级这些程序集到v30729? 谢谢,汤姆

Excel VSTO NewWorkbook事件不会在启动时发生

我正在开发Excel 2010应用程序级插件。 我需要为与Workbook接口相关的一些Application事件编写处理程序,尤其是NewWorkbook事件。 所以在ThisAddIn_Startup处理程序中,我添加了这样的代码: Microsoft.Office.Interop.Excel.AppEvents_Event app = Globals.ThisAddIn.Application; app.NewWorkbook += MyApp_NewWorkbook; 当在运行的Excel实例中创build新的工作簿时,它工作正常。 但是,当我运行新的Excel实例(在标准情况下,这意味着创build新的工作簿),这个事件不会被我的处理程序捕获。 然后我想,当我运行新的Excel实例时,NewWorkbook事件发生在ThisAddIn_Startup事件之前。 在WorkbookOpen事件应用程序的情况下,就像我所期望的那样 – 当我在运行的Excel实例中打开现有的工作簿时,以及在我双击文件时捕获事件。 我想知道为什么这些事件处理不同? 在这种情况下我应该做什么? 我需要识别是否创build了新的工作簿,或者是否打开了现有的工作簿,而不pipeExcel是否已经运行。

使用vb.net在大型excel文件上执行SQL Query的最佳方法是什么?

安装环境: 我正在开发一个Excel 2010应用程序级插件,使用.NET框架4使用vb.net。 我的目标: 让用户键入多个名称进行search 使用名称列表在大电子表格上执行SQL查询(30,000多行) 返回logging集并粘贴到新的工作表中 性能是我的首要任务。 我想知道利用.NET框架来做到这一点的最快方法。 在我的代码中使用ADO连接对象的工作,但过程需要太长时间(5 – 8秒)。 这是我在名为wells的表上使用的SQL查询: SELECT * FROM wells WHERE padgroup in (SELECT padgroup FROM wells WHERE name LIKE 'TOMCHUCK 21-30' OR name LIKE 'FEDERAL 41-25PH') 以下是表格的一部分: 我现在使用这个代码来创build一个ADO连接对象来检索我的结果: 'Create Recordset Object rsCon = CreateObject("ADODB.Connection") rsData = CreateObject("ADODB.Recordset") rsCon.Open(szConnect) rsData.Open(mySQLQueryToExecute, rsCon, 0, 1, 1) 'Check to make sure […]

如何使用Moq来模拟具有两个索引的索引属性

这个问题清楚地显示了你如何用MOQ模拟索引属性: 如何设置索引属性 但是,如果你有两个索引呢? 例如,假设您有一个_Worksheet对象(来自vsto) var mockWorksheet = new Mock<_Worksheet>(); 你想创build一个名为Cells的属性,这样你就可以像这样使用它: var range = worksheet.Cells[1,1]; 注意:范围可以是另一个模拟,可以用下面的代码来模拟:var mockRange = new Mock(); 有什么build议么?