Tag: excel addins

如何将一个Excel ListObject添加到C#中给定的工作表?

我目前正在C#中开发一个excel插件,其中有几个方法(表值函数),这些方法可用于excel用户和程序员(VBA)。 我怎样才能写一个方法添加一个新的ListObject(Excel表)到给定的Excel工作表中,并将给定的DataTable绑定为数据源? 像下面这样: using Excel = Microsoft.Office.Interop.Excel; … [ClassInterface(ClassInterfaceType.AutoDual)] public class TableFunctions { … public Excel.ListObject CreateListObject(Excel.Worksheet ws, string TableName, DataTable dt, string CellStr = "A1") { … } 这种方法,发送Worksheet对象作为参数显然不起作用。 或者可以吗?

为什么在应用程序级别的SelectionChange事件不起作用?

我创build了一个小macros来返回唯一值的数量,并在select范围时将其显示在Excel的状态栏中。 这在文档级别正常工作。 但是,当我尝试在应用程序级别运行SelectionChange事件时,它不会启动。 以下是我的。 类模块“ExcelEventCapture” Option Explicit Public WithEvents ExcelApp As Application Private Sub ExcelApp_SelectionChange(ByVal Target As Range) If TypeName(Target) = "Range" Then Application.StatusBar = "Unique Count: " & CountUnique(Target) End If End Sub Private Function CountUnique(rng As Range) As Long Dim dict As Dictionary Dim cell As Range Set dict = New Dictionary For […]

Excel函数在通过代码设置后抛出exception。 在excel中使用时有效

我已经定义了我自己的Excel函数(称为ADXExcelFunctionDeescriptor )。 方法存根(stub)如下所示: public static object ExecuteMyFunction(object values, object tagName) { // Some code here } 该方法接收一个double值的数组和名为name的string。 在devise视图中,我的ADXExcelFunctionDeescriptor如下所示: 我通过以下几行代码调用并设置函数: var formula = string.Format(@"={0}({1};{2})", Temp.FORMULA_NAME, this.DataRangeTextBox.Text, tagCaption); resultRange.set_Value(Type.Missing, formula); resultRange.Formula = resultRange.Value; 这将导致exception! exception如下所示: System.Runtime.InteropServices.COMException occurred HResult=-2146827284 Message=Ausnahme von HRESULT: 0x800A03EC Source="" ErrorCode=-2146827284 StackTrace: bei System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) bei […]

而不是采取rowValue.Columns.Value2 我怎么能比较标题,并采取其值在Excel中adin?

我有excel ad-in project ,我fetching values from excel下面的fetching values from excel文件fetching values from excel通过index of sheet row 。 rowValue.Columns.Value2[1, 1]; rowValue.Columns.Value2[1, 2]; 如何获得基于行标题文本的值,而不是提供表格行号?

以编程方式将单元格格式化为checkbox

我正在开发一个Excel插件,它将在构build工作簿之前从Web服务中获取数据。 在示例工作簿中,我已经给出了一些单元格为1或空的要求。 这些是SUM MED,结果存储在其他地方。 我不特别喜欢这个,我试图想办法使用checkbox的这些领域,但仍然保持单元格值为1或0(为选中和未选中)。 这给了我几个问题: 可以添加和configuration一个checkbox,以便检查它给出值1并取消选中它给关联单元格0? 这可以通过一个Excel插件程序来完成吗? 使用我广泛的研究能力(谷歌),我发现我可以添加一个checkbox,并将其与单元格关联,以便检查/取消选中单元格值设置为TRUE或FALSE 。 如果这是唯一的select,我可以处理它(叹!),但这可以从一个加载中的C#代码完成?

当Excel启动时,在Visual Studio 2010中创build的Excel变得无法使用

我已经使用visual studio 2010创build了一个excel广告。我正在使用点击一次部署将其部署到共享驱动器,并让我的办公室中有权访问此共享驱动器的所有用户都安装在这些计算机上。 我目前遇到的问题是,一旦用户安装广告,它工作正常。 function区有我devise出来的附加广告标签。 但是,如果他们closures了Excel,他们在不久之后又回来了,这个广告就被禁用了。 用户现在必须重新启用广告 – 只需返回到Excel选项 – >加载项 – >pipe理下拉列表中selectCom广告 – >点击开始,然后再次检查广告。 我希望当用户启动Excel时总是加载公司的广告。 我已检查负载行为,并设置为3我很困惑,为什么这会继续发生任何build议或想法如何debugging这种行为,我会感到难以置信的感激。 我也阅读了这篇文章,并已经在我的解决scheme上空了。

如何在Excel中使用C#获取用户选定范围中的特定单元格

我创build了我的第一个Excel加载项,并希望查找用户select的范围内的特定单元格。 我知道列中的值是我需要的。 所以我testing它: Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range; Excel.Range firstValue = selection.Columns["I"].Find("*", Type.Missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart,Excel.XlSearchOrder.xlByColumns,Excel.XlSearchDirection.xlNext, false, Type.Missing,Type.Missing); 现在我有“I”栏的第一个值, 当用户所做的“select”从列“A”开始时, 如果用户select从C2到H20的取样,代码不能find列“我”我变得比其他范围,而不是“我”列。 我认为他是“我”总是“9”。 当用户在新范围中从“C2”到“H20”select的列是“C”=“0”,列“L”= 9时,即使我在代码中写入“I”,代码select列“L” 。 有没有人有一个想法,我怎么能读取特定的列或细胞我想要的内心select的用户,无论用户开始他的select? 先谢谢你

Excel AddIn中的VBA应用程序事件

我正在做一个Excel 2010的AddIn,并试图将一些代码添加到应用程序事件Application_WorkbookActivate(ByVal Wb As Workbook) 但是,AddIn中的模块不能有这些事件。 我试着用这个事件创build一个ClassModule,然后在AddIn的负载上初始化它。 读完这个后,我明白了这个想法。 这里是我在AddIn的类“EventListener:” Dim WithEvents app As Application Private Sub app_WorkbookActivate(ByVal Wb As Workbook) Debug.Print "Workbook Activated:"; Wb.Name Call MyAddInModule.RefreshVisibility End Sub 这里是我的模块“MyAddInModule:” Public Listener As EventListener Public myRibbonUI As IRibbonUI ' Ribbon callback : runs when ribbon is loaded Public Sub onLoadRibbon(ribbon As IRibbonUI) ' Get a reference […]

在加载项Workbook_Open中的Application.OnTime

我已经构build了一个自定义的Excel加载项,目前我正试图找出一种方法来通过VBA提示用户在新版本的加载项可用时。 我尝试使用workbook_open事件来检查最新版本,然后用用户窗体提示用户,但我发现,当Excel加载一个加载项触发一个用户窗体时,Excel停止加载用户实际尝试打开的工作簿和重新加载加载项。 所以虽然用户表单像我想要的那样工作,但是用户却得到一个空白(不读取表单)Excel加载的加载项。 所以我考虑使用Application.OnTime来推迟VBA,直到加载项和目标文件都打开。 我在这里和这里都有这样的印象,这是可能的,但我只能使它在.xlsm文件而不是.xlam文件中工作。 以下是我正在testing的代码: Sub Workbook_Open() Application.OnTime Now() + TimeValue("00:00:05"), "Test_Addin.xlam!Versioning.Notify_User" End Sub 在一个普通的代码模块中: Sub Notify_User() MsgBox "Hello" End Sub 所以,我的问题: 我在这里做错了什么? 我想知道是否有一些关于如何加载/加载的devise,使它不允许执行这种types的行动。 或者,有没有不同的方式可以做到这一点,你可以想到? 我读到了迪克·库斯莱卡(Dick Kusleika)关于这个话题的一篇有趣的博客文章 (和评论),但是听起来好像有人在每个子程序中都进行了版本检查…我有很多程序,所以这听起来不是很好另一种方法,虽然我可能不得不诉诸于此。

使用Solver加载项时,Excel应用程序在后台运行

我正在开发一个.NET应用程序,它打开一个工作簿,运行一些VBAmacros,刷新连接等等。这很好,但是当我运行一些使用Solver加载项函数的VBAmacros时,即使在我重新发布所有COM对象正确(调用'Marshal.ReleaseComObject')。 我该如何解决? 编辑: 这里是一个重现此问题的代码示例: Excel.Application xlApp = null; Excel.Workbooks xlWorkbooks = null; try { xlApp = new Excel.Application(); xlApp.Visible = true; xlApp.DisplayAlerts = false; xlWorkbooks = xlApp.Workbooks; Excel.Workbook xlWorkbook = xlWorkbooks.Open(Filename: path, ReadOnly: false); xlApp.Run(macro); xlWorkbook.RefreshAll(); xlWorkbook.Close(SaveChanges: true); xlApp.Quit(); releaseObject(xlWorkbook); releaseObject(xlWorkbooks); releaseObject(xlApp); } catch (Exception e) { Console.WriteLine("Erro ao executar métodos Excel"); Console.WriteLine(e.Message); } 在这里我实现的function来释放COM对象: […]