Tag: vsto

将.net方法公开为Excel函数?

我有一套坐在.Net DLL中的计算方法。 我想使Excel(2003+)用户可以使用这些方法,以便他们可以在电子表格中使用这些方法。 例如,我的.net方法: public double CalculateSomethingReallyComplex(double a, double b) {…} 我想让他们只需在随机单元格中input公式即可调用此方法: =CalculateSomethingReallyComplex(A1, B1) 什么是最好的方法来完成这个?

如何检查C#中的Excel范围是否为空

我想检查一个范围(行*列中的单元格)是否使用C#为空。 我可以遍历单元格,但任何更好和更快的方式? 任何方法来获取选定/活动单元格的范围和行数和列数?

不正确的asynchronous/等待工作,Excel应用程序级别加载项中的Excel事件

我在加载项应用程序中遇到了使用asynchronous/等待的问题,我有自定义任务窗格,用户可以使用它下载一些数据,所以出现问题: 待完成的操作完成后,控件不会返回到上一个执行上下文。 我用windows窗体创build了示例,并粘贴与等待相同的方法,它工作正常 – 我可以在等待操作后使用窗体控件,但不是在加载中,我不得不调用自定义任务窗格调用方法。 简单的例子: private void SearchPaneButton_Click(object sender, EventArgs e) { Search(); } private async void Search() { var searchText = SearchTextBox.Text; SearchPaneButton.Text = "Loading…"; var data = await new DataServiceClient().GetDataAsync(searchText); this.Invoke((MethodInvoker)(() => { SearchPaneButton.Text = "Search"; ToggleWorkbookEvents(); })); } 在我的插件中,我需要处理一些事件 – 工作表被改变,工作表被激活/停用,但是这些事件消失并且在等待操作之后不被触发,并且我必须在每个事件之后使用诸如“切换”(移除+添加)事件等待使用。 简单的例子: private void ToggleWorkbookEvents() { var excel = Globals.BPNAddIn.Application; //need […]

如何find一个单元格命名的范围 – VSTO

我用C#和VSTO生成了一系列的行。 我已经基本上加载了几行数据,并给每个单元一个NamedRange。 我的问题是,我知道开始行和结束行索引,遍历每个单元格,并检索它的NamedRange。 我试过Excel.Range范围=(Excel.Range)m_worksheet.Cells [x,y]; 它获得的范围很好,但是当我做一个range.Name.ToString(); 我得到“System .__ COM ….”而不是名称。 任何人都可以协助 谢谢

我可以在Word或Excel中创build撤消事务吗? (VSTO)

我注意到Project 2007的function允许撤销的操作被放置在单个堆栈项目中,或“撤销事务”。 例如: Application.OpenUndoTransaction "Create 6 tasks" Dim i As Integer For i = 1 To 6 ActiveProject.Tasks.Add "UndoMe " & i Next Application.CloseUndoTransaction 这意味着用户可以撤消所有的动作,而不是6次。 这将是伟大的Word和/或Excel中实现,因为我正在做一些事情在VSTO,一次做多个更改,这将是一个恼人的用户,如果他们必须点击撤消多次,如果他们犯了一个错误。 虽然这些特定的function似乎不存在,有没有人知道是否/如何以某种方式做到这一点?

Excel编程方法

在UDF,macros,加载项,自动化加载项,XLL或VSTO之间的Excel编程有什么区别。 我应该使用哪一个,在哪种情况下?

无法在空引用上执行运行时绑定 – 清空Excel单元格

我似乎无法想出一种方法来纠正标题中提到的错误,并正在寻找应该做什么的一些想法。 我正在尝试将excel电子表格的行读取到对象中。 第一次循环我没有问题,因为行1,列1和行1列2中有数据。 但是,当它到达第2行,第1列和第2行第2列时,由于上述错误而失败,因为电子表格中的这些单元格是“空的” 我只是不能在那里我可以把一些“如果空”检查。 任何人都可以build议如何做到这一点? 这是我的代码… private static void IterateRows(Excel.Worksheet worksheet) { //Get the used Range Excel.Range usedRange = worksheet.UsedRange; // create an object to store the spreadsheet data List<SPREADSHEETModel.spreadsheetRow> spreadsheetrows = new List<SPREADSHEETModel.spreadsheetRow>(); //Iterate the rows in the used range foreach (Excel.Range row in usedRange.Rows) { for (int i = 0; i < […]

在c#中,对象是什么意思?

所以我从一个旧的VSTO项目中find了我的一些代码,并注意到这一点: Excel.Worksheet sheet = Globals.ThisAddIn.Application.Worksheets["Unique Hits Per URL"]; Dictionary<int, string> ids = new Dictionary<int, string>(); object[,] cellRange = (object[,])sheet.get_Range("E:E").Cells.Value; for (int i = 1; i < cellRange.GetUpperBound(0); i++) if (cellRange[i, 1] != null) ids.Add(i, cellRange[i, 1].ToString()); 在数据types上指定[,]是什么意思? 看看代码,它看起来像一个matrixfunction,但老实说,我认为C#matrix处理像记号像[] []。

Worksheet.Name导致OutOfMemoryException

.Net4 C#VSTO4 Excel加载项: 以下函数经常被调用,让我们说每一秒: /// <summary> /// Gets a unique identifier string of for the worksheet in the format [WorkbookName]WorksheetName /// </summary> /// <param name="workbook">The workbook.</param> /// <param name="worksheet">The worksheet.</param> /// <returns> /// A unique worksheet identifier string, or an empty string. /// </returns> public static string GetWorksheetUniqueIdentifier(Workbook workbook, dynamic worksheet) { if (workbook == […]

有效地获得格式化的单元格值

我希望能够有效地从Excel中检索格式化单元格值的multidimensional array。 当我说格式化的值,我的意思是我想要得到他们完全一样,他们出现在应用所有单元格格式的Excel中。 Range.Value和Range.Value2属性适用于将大量单元格的单元格值检索到multidimensional array中。 但是这些是实际的单元格值(至less在Range.Value2中是这样的,我不太确定Range.Value在某些值上做了什么)。 如果我想检索在单元格中显示的实际文本,我可以使用Range.Text属性。 这有一些警告。 首先,您需要自动调整单元格,否则,如果不是所有文本都以当前单元格宽度可见,则可能会得到类似于####的内容。 其次,Range.Text不适用于一个以上的单元格,因此您必须遍历范围内的所有单元格,对于大型数据集来说,这可能非常慢。 我尝试的另一种方法是将范围复制到剪贴板,然后将剪贴板文本parsing为制表符分隔的数据stream,并将其传输到multidimensional array中。 这似乎工作得很好,虽然它比得到Range.Value2慢,对于大型数据集要比获得Range.Text快得多。 但是,我不喜欢使用系统剪贴板的想法。 如果这是一个需要60秒的非常长的操作,并且该操作正在运行,则用户可能决定切换到另一个应用程序,并且将非常不高兴地发现其剪贴板不工作或者具有神秘数据。 有没有办法,我可以有效地检索格式化的单元格值到multidimensional array? 我已经添加了一些从VSTO应用程序中的几个function区button运行的示例代码。 第一个设置一些好的testing值和数字格式,第二个button将显示在MessageBox中使用这些方法之一检索时的样子。 我的系统上的示例输出是(由于区域设置,您可能会有所不同): Output using Range.Value 1/25/2008 3:19:32 PM 5.12345 2008-01-25 15:19:32 0.456 Output using Range.Value2 39472.6385648148 5.12345 2008-01-25 15:19:32 0.456 Output using Clipboard Copy 1/25/2008 15:19 5.12 2008-01-25 15:19:32 45.60% Output using Range.Text and Autofit 1/25/2008 15:19 […]