Tag: vsto

如何在Excel中突出显示function区?

我正在做一个Excel插件,它有一个自己的function区,用一些button做一些数据访问/人口。 其中一个button/函数导入一些数据并填充工作表。 填充工作表后,使用以下代码将数据转换为Excel表格 – fullRange.Worksheet.ListObjects.AddEx( SourceType: Microsoft.Office.Interop.Excel.XlListObjectSourceType.xlSrcRange, Source: fullRange, XlListObjectHasHeaders: Microsoft.Office.Interop.Excel.XlYesNoGuess.xlYes); 我的问题是,每当Excel表格格式的数据填充完成时,突出显示的function区将更改为“devise” – “表格工具”,而不是“我的插件”function区。 所以我的问题是…有没有一种方法来编程地使用VSTO在Excel中高亮function区? 所以我可以做到这一点后填充。 提前致谢!

如何在Excel中删除表格,但使用VSTO保留注释?

我正在使用下面的代码片段将Excel范围与数据转换为表格。 在某些情况下,我需要删除表格,但在单元格中保留注释。 有什么办法可以实现吗? 另外,有没有办法打开/closures标题? 我尝试了XlListObjectHasHeaders: Microsoft.Office.Interop.Excel.XlYesNoGuess.下的不同选项XlListObjectHasHeaders: Microsoft.Office.Interop.Excel.XlYesNoGuess. 但那些不起作用。 谢谢你的帮助。 finalRange.Worksheet.ListObjects.AddEx( SourceType: Microsoft.Office.Interop.Excel.XlListObjectSourceType.xlSrcRange, Source: finalRange, XlListObjectHasHeaders: Microsoft.Office.Interop.Excel.XlYesNoGuess.xlYes); 我像这样删除表结构 – finalRange.Worksheet.ListObjects.Item[1].Delete(); 编辑(多表的解决scheme): foreach (var table in sheet.ListObjects) { Microsoft.Office.Interop.Excel.ListObject tempObj = (Microsoft.Office.Interop.Excel.ListObject)table; Microsoft.Office.Interop.Excel.Range tempRange = tempObj.Range; tempRange.ClearContents(); }

VSTO Excel AddIn:当Excelinput框从模态窗口窗体调用时,焦点转到Visual Studio

我在Excel AddIn应用程序中有一个窗体窗体。 我使用ShowDialog()将窗体显示为模式窗口。 我需要在我的应用程序中指定一个范围地址。 所以,我添加了一个调用Application.InputBox的button。 button单击事件包含以下代码 private void button1_Click(object sender, EventArgs e) { Excel.Range myRng; Excel.Application app = Globals.ThisAddIn.Application; myRng = app.InputBox("Prompt", "Title", Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, 8); label1.Text = myRng.Address.ToString(); this.Focus(); } 它工作正常。 但是,当input框处于活动状态时,我需要隐藏窗体窗体。 所以我稍微修改了一下代码 private void button1_Click(object sender, EventArgs e) { Excel.Range myRng; Excel.Application app = Globals.ThisAddIn.Application; this.Visible = false; myRng = app.InputBox("Prompt", […]

在MVS 2015中创buildExcel 2013模板时出错

我目前正在尝试使用Visual Studio在Visual C#中为Excel 2013创build一个加载项模板。 每当我尝试创build一个新的项目,我得到以下错误信息: 无法打开项目。 Excel工作簿“test.xltx”丢失或损坏。 我注意到,在这个项目的目录中有一个.sln文件,但.xltx文件丢失(就像错误说的那样)。 任何线索我如何解决这个问题? 这里是发生错误的屏幕截图的链接。 popup错误消息 这里是发生错误的屏幕截图的链接。 谢谢

C#将总行添加到Excel工作表的最后一行

我有这样的语法,不会抛出任何错误,似乎是正确的代码。 但是,总行不会被添加。 什么是我的语法不正确? if (xlApp.WorksheetFunction.CountA(WS.Cells) != 0) { lastRow = WS.Cells.Find("*", WS.Range["A1"], Excel.XlFindLookIn.xlFormulas, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, false).Row; } else { lastRow = 1; } WS.Range["C" + lastRow + 1].FormulaR1C1 = "=SUM(R[-" + lastRow + "]C:R[-1]C)"; WS.Range["C" + (lastRow + 1) + ":N" + (lastRow + 1)].FillRight(); WS.Range["N" + lastRow + 1].FillRight(); 编辑 我也尝试使用下面的Special Cells语法和相同的结果,没有错误,但总行不是添加到我的任何工作表 Excel.Range […]

基于Excel表更改启用/禁用function区button – VSTO

我已经写了一个VSTO Excel应用程序,我试图改变基于所选表单的button行为。 该事件实际上是在ThisWorkbook.cs类中引发的,Ribbonbutton只能在Ribbon.cs类中访问。 有没有办法启用或禁用从ThisWorkbook.cs类的function区button,而无需在ThisWorkbook.cs类中创buildfunction区的实例? void ThisWorkbook_SheetActivate(object Sh) { if (SomeCondition) { //Enable button } else { //Disable button } }

C#Interop格式validation列表

我实现了一个代码,将数据validation添加到指定范围的单元格中,但是包含的值被分块化。 这是我的代码 var listFormats = new List<string>(); listFormats.Add("US punctuation + alphanumeric lowercase:[a-z0-9,.?;:!&()_'" + '"' + "]+"); listFormats.Add("US punctuation + alphanumeric uppercase:[A-Z0-9,.?;:!&()_'" + '"' + "]+"); listFormats.Add("US punctuation + alphanumeric mixedcase:[A-Za-z0-9,.?;:!&()_'" + '"' + "]+"); var flatListFormats = string.Join(",", listFormats.ToArray()); rng.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertInformation, XlFormatConditionOperator.xlBetween, flatListDelimiters, Type.Missing); 这是我在validation列表中得到的: 代替 US punctuation + alphanumeric lowercase:[a-z0-9,.?;:!&()_'"]+ US punctuation + alphanumeric […]

ListObject在添加后包含额外的标头

我从D3单元格开始在工作表上添加一个新的ListObject,然后创build列并使用XMLMap绑定它们。 这是我的代码: Excel.Worksheet sheet = _workbook.Sheets["Data1"]; sheet.Activate(); sheet.get_Range("D3").Select(); var xmlMap = _workbook .XmlMaps .Add(collectionDatablock.GetSchema(), NetworkTree.RootName); xmlMap.Name = collectionDatablock.Name; var listObject = sheet .ListObjects .Cast<Excel.ListObject>() .SingleOrDefault(l => l.Name == "ListName"); listObject?.Delete(); listObject = sheet.ListObjects.Add(); listObject.Name = "ListName"; var column = listObject .ListColumns .Cast<Excel.ListColumn>() .First(); SetColumn(column, xmlMap, "Col1", "/Root/Region/@UniqueName"); var newColumn = listObject.ListColumns.Add(); SetColumn(newColumn, xmlMap, f, solution, […]

设置例外Excel工作簿的自定义文档属性

我正在开发一个优秀的VSTO插件,在附加组件I中构build一些工作表,以便稍后处理它们。 我想知道如果用户打开和Excel工作簿,如果工作簿与我的加载项结构或不做一些处理。 为此,我尝试使用CustomDocumentProperties。 我面临两个问题: visual studiodebugging器不评估DocumentPropertiesvariables的子项,我不能检查它们。 当我尝试通过调用DocumentProperties.Add创build一个新的DocumentPropertiy时,我得到一个ArgumentException,指出该值不在范围内。 调用函数来构造工作簿: public void InitWorkbook() { workingBook = Globals.Factory.GetVstoObject(Application.ActiveWorkbook); var dps = (DocumentProperties)workingBook.CustomDocumentProperties; if (!customDocumentPropertyExist("validctcwb", dps)) { // some sheet creation and listobject creation dps.Add("validctcwb", false); } } bool customDocumentPropertyExist(string name, DocumentProperties dps) { foreach (DocumentProperty p in dps) { if (p.Name == name) { return true; } } […]

在VSTO Excel Addin应用程序中pipe理ActiveWorkbook的最佳方法

我已经开发了一个相当密集的Excel Addin(基于VTSO),它从数据库查询创build一个内存数据表,然后将其绑定到ListObject。 当创build这个ListObject(包括更新数据表中的计算的事件处理程序,以及popup以显示有关单元的附加信息的自定义任务窗格)时,还有其他一些function可用。 Addin工作正常,但是当用户打开其他Excel工作簿或其他Excel工作实例时,出现问题。 pipe理这个特定应用程序状态的最好方法是什么? 用户应该一次只能处理该工作簿的一个副本,但Excel的灵活性使其难以pipe理。 其他人如何pipe理? 我正在考虑在创build工作簿时创build一个GUID,然后在调用代码时testing这个GUID,以确保活动工作簿是正确的工作簿。 或者,还有更好的方法?