Tag: vsto

以编程方式重新加载Excel加载项

我有一个Excel插件,有很多function。 在标题为“configuration设置”的function区中,我有一个button,允许用户select是否允许某些选项(无论是右键单击菜单,还是显示function区上的某些button)。 我知道定义一个右键单击菜单或devisefunction区的唯一方法是在excel插件的启动。 我有一个configuration文件,加载检查,但如果用户使用我的function区button更改configuration,它没有任何效果,直到Excel重新打开或用户手动重新加载插件。 有没有办法做到这一点编程?

允许用户更改表单名称,VSTO

这与我的问题类似,但我的解决方法dosn't没有帮助这些实例和原因是更多的定义。 我有一个工作簿级别定制,将从保留复制的工作表的名称的文件夹添加工作表。这工作正常,并不会导致任何问题,除非用户重命名工作表。 如果用户重命名工作表,保存工作簿,然后回到它,然后尝试执行引用工作簿或工作表,他们得到错误的任何操作: Microsoft.VisualStudio.Tools.Applications.Runtime.ControlNotFoundException: This document might not function as expected because the following control is missing: Sheet5. Data that relies on this control will not be automatically displayed or updated, and other custom functionality will not be available. Contact your administrator or the author of this document for further assistance. —> System.Runtime.InteropServices.COMException: Programmatic access […]

VSTO在文本框中显示选中的单元格引用

我有一个窗体的值列表显示每个与相应的文本框,告诉程序显示它的细胞。当前用户input一个范围(如“A1”,“G6”等… )为他们想要显示的每个值,并保留空白。 有什么办法可以点击文本框,然后点击一个单元格,并在文本框中显示该单元格引用(如Goal Seek的工作方式)?

启动Excel并从另一个程序加载特定的插件

我想在C#程序中运行(打开)Excel,并同时加载一个特定的加载项。 这可能吗? C#程序应该是一种启动程序EXE,它打开了一个自己特定的Excel解决scheme(使用由VSTO开发的特定的Addin(DLL))。 外接程序(function区)从头开始,所有其他内置选项卡都隐藏起来。 只有当Excel由启动程序EXE启动时才能加载加载项。 我知道,Excel可以例如开始 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "EXCEL.EXE"; Process.Start(startInfo); 但有没有可能说新的Excel进程,哪个插件应该加载?

在excel中收听刷新事件

当用户点击“刷新”/“全部刷新”button时,excel似乎只是调用工作簿中每个(或选定的)QueryTable的刷新方法。 然而,听QueryTable的BeforeRefresh和AfterRefresh事件并不真的帮助我在这里,因为我需要在工作簿中的所有 QueryTables(分别在所有选定的QueryTables后)更新后执行一些东西。 有没有办法做到这一点? 也许它可能以某种方式听取鼠标点击该刷新button?

使用代码在Excel的名称pipe理器中对命名范围进行sorting

我使用VSTO从Excel电子表格中获得命名范围列表: public List<Name> GetNamedRanges(Workbook activeWorkbook) { List<Name> namedRanges = new List<Name>(); Name name; for (int i = 0; i < activeWorkbook.Names.Count; i++) { name = activeWorkbook.Names.Item(i + 1); if (!name.Value.Contains("#REF")) { namedRanges.Add(name); } } return namedRanges; } 这会以奇怪的顺序返回名称: 有没有人有一个简单的方法按列顺序对名称范围进行sorting。 例如: 工作表Sheet1 = $ A $ 9:!$ B $ 172 工作表Sheet1 = $ C $ 9:$!d […]

在VSTO Addin中设置CurrentCulture

我正在为Excel 2007创build一个VSTO插件。所有在我的英语(英国)区域设置的开发计算机上工作正常。 但是,一些最终用户将有其他设置。 当向数据库添加信息时,所有工作都正常,但是当我尝试使用英语(美国)区域设置填充数据表时,它失败。 Dim TA As New DB_InquiriesTableAdapters.qry_InquiriesTableAdapter Dim DB As New DB_Inquiries.qry_InquiriesDataTable TA.Fill(DB) 'FAILS HERE as date format is incorrect for regional settings 我已经尝试在插件启动设置Thread.CurrentCulture但这引发和exception说: MSCORLIB文化不受支持 任何人都知道如何解决这个问题?

vsto:从Windows窗体应用程序调用不同的Excel工作簿在相同的解决scheme使用C#

我有3个项目包括一个Windows窗体应用程序(WFA)和两个Excel工作簿在1解决scheme.. 我想通过点击WFA中的不同button从同一个解决scheme中调用/打开这两个工作簿。而且我被困在编码中了。不知道如何编写代码来打开,激活…等 任何人有任何想法可以帮助? * ps:我对vsto / c#.net很新 我试过这个..但工作簿不打开.. private void Button_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application xlApp; Microsoft.Office.Interop.Excel.Workbook xlWorkBook; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); xlWorkBook = xlApp.Workbooks.Open(@"C:\Document\PROJECT\abc.xlsx"); xlWorkSheet = (Microsoft.Office.Interop.Excel.xlWorkSheet)xlWorkBook.Worksheets.get_Item(1); ((Microsoft.Office.Interop.Excel._Worksheet)xlWorkBook).Activate(); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); }

Excel C#Interop – 将选定的范围仅限于填充的单元格

我有一个VSTO解决scheme,纠正突出显示的单元格中的数据。 我遇到的问题是,如果用户select整个行/列,程序循环通过成千上万的空单元格,处理最后一个填充的单元格很长时间。 我的代码如下所示: var addIn = Globals.ThisAddIn; Excel.Worksheet sheet = addIn.Application.ActiveSheet; Excel.Range range = addIn.Application.Selection; foreach (Excel.Range cell in range.Cells) { var val = cell.Value2; if (val == null) continue; 我已经看到如何使用线程: AdvancedFilter(Excel.XlFilterAction.xlFilterInPlace, Type.Missing) 但我似乎无法把两者联系起来。 我希望我的“范围”对象仅限于填充单元格,或者当超过最后一个值时能够将我的foreach循环短路。 我想到做这样的事情: if (cell.Row > populatedRange.Row || cell.Column > populatedRange.Column) break; 但是,如果select了除整行/列以外的其他选项(用户select填充范围之外的单元格,并忽略所有后续填充的单元格),则这可能会破坏代码。 我知道我错过了一些简单的事情,但是我的尝试(和search)还没有得出答案。

获取聚焦细胞中的Excel当前值

我正在开发一个Excel加载项。 我需要从A1单元格获取值,所以我使用这个代码 value = workbook.Worksheets[1].Range["A1:A1"].Value2; 这很好,但如果: – 上一个单元值是“1” – 用户键入“2”,但不按Enter或Tab – 用户激活function区按下button 从此代码示例获得的值2是“1”(以前的值)不是“2”(当前值显示在单元格中,但未validation)。 这在我的情况是错误的,我需要“2”。 我怎样才能解决这个问题? 我试图强制select另一个单元格 Application.ActiveCell.Offset[1, 0].Select(); 要么 Application.ActiveSheet.Range["A2"].Select(); 但没办法..“2”的价值是失去了。 我也尝试从工具栏中的文本区域获得价值(“2”显示在那里),但不知道锄头做!