Tag: vsto

在Excel插件中存储插件设置的最佳方法

我正在Visual Studio中开发一个Excel插件。 这个插件正在与WCF服务进行通信。 我想让用户能够更改Excel加载项中的WCF服务器地址。 所以我有一个Windows窗体,并保存为属性的string。 现在我将服务器地址存储在: Properties.Settings.Default.serviceAddress 服务器地址必须: – 可以通过Excel插件进行更改 Excelclosures后需要保存服务器地址 有没有更好的方法来做到这一点?

VSTO取消工作簿通过发送按键打开事件

在Microsoft Excel中打开一个大文件(可以说是一个大于50MB的csv文件)时,会在屏幕右下angular打开一个小进度条,并显示“按ESC取消”。 如果在打开文件时按ESC键,则会取消操作。 如果文件是200MB,Excel打开文件的时间可以是20秒或更长,所以有能力取消。 在我的VSTO插件,我想有能力取消大型工作簿的文件加载操作。 因为我正在做文件的后期处理,我想有我自己的对话框,显示文件正在打开/正在处理(打开时滚动进度条,和正常进度条后处理)进度。 在这个进度表上,我想要一个取消button,可以停止当前的操作。 为了在Excel打开文件时显示自定义选取框进度条窗体,必须在新线程上创build窗体,因为我相信Excel是单线程的,所以如果在主线程上执行,窗体将冻结。 我的解决scheme是让这个表单在一个单独的线程上执行,然后有一个Cancelbutton,当按下Cancelbutton时,它使用SendKeys(或类似的)来发送ESC键击。 但是,这个解决scheme似乎并不奏效。 使用发送按键的各种方法,或者什么都不会发生,或者我得到这个exception“消息filter指示应用程序正忙(从HRESULTexception:0x8001010A(RPC_E_SERVERCALL_RETRYLATER))” 我尝试过发送按键的各种方法是: //1 Globals.ThisAddIn.Application.SendKeys("{ESC}"); //also tried SendKeys.Send("{ESC}"); //2 Globals.ThisAddIn.Application.SendKeys("{ESC}", true); Globals.ThisAddIn.Application.Wait(DateTime.Now + new TimeSpan(0, 0, 1)); //3 Nuget package to which uses SendInput from https://inputsimulator.codeplex.com/ InputSimulator inputSim = new InputSimulator(); inputSim.Keyboard.KeyPress(VirtualKeyCode.ESCAPE); //4 sending keystorkes via Window hooking http://stackoverflow.com/questions/10407769/directly-sending-keystrokes-to-another-process-via-hooking 我也试过所有这些使用BeginInvoke的方法,没有任何成功。 有没有人有任何build议,我怎样才能得到一个取消button成功注册一个ESC击键与Excel? 我猜测解决scheme有不同的处理线程。

ClickOnce Excel VSTO安装错误 – 访问被拒绝

我有一个基于VSTO Excel文档的解决scheme,我使用ClickOnce来部署自动更新。 该代码由我们的内部authentication中心签署,我们内部网上的所有机器均接受此authentication。 我遇到了一些select安装错误的用户(大多数用户可以从我们的网站安装/更新服务.XLSX(和相关文件))没有问题,但我有一些用户运行到完全相同的错误。 我们遇到以下错误,无论是否将其设置为单击“安装”后从Web或本地文件夹安装: Downloading file:///C:/Users/tharvey/Desktop/OTISOppUpdatePublisher/Application Files/OTISOppUpdatePublisher – Test_1_0_5_0/libs/Telerik.WinControls.dll.deploy did not succeed. 进一步例外细节: System.UnauthorizedAccessException: Access to the path 'C:\Users\tharvey\AppData\Local\Temp\1\Deployment\WNMBVH0B.1WD\M89GBL6B.GDM\libs\Telerik.WinControls.dll' is denied. 所有客户端都使用Windows 7 / Office 2010和典型的非pipe理员用户帐户。 我已经让他们尝试使用pipe理员帐户,但没有什么区别。 我们遇到了同样的错误。 我已经在Excel中查看了用户的信任中心设置,并validation了安装位置位于可信位置(大多数情况下是用户的桌面)。 任何想法或你有没有见过这个? 我已经search了这个错误,但没有任何帮助。 我发现IIS错误configuration错误和其他发布问题(我不认为会是这样,因为我们的大多数用户没有问题),因此,迄今没有任何帮助。

通过VSTO加载项将新的XML源ListObject添加到Excel工作表中

我试图从XML插入数据到Excel工作表。 我使用以下方法: sheet.ListObjects.AddEx(SourceType: Excel.XlListObjectSourceType.xlSrcXml, Source: ???) 但我不知道应该提供什么资料。 我试图inputXML数据作为一个string,但没有奏效。 你有什么想法?

如何使用应用程序级加载项对单个Excel实例的Ribbon元素进行更改?

我正在使用VSTO和VB.NET for Excel 2013.我正在开发一个应用程序级外接程序,但是我不能让两个不同的工作簿存储不同的“function区状态”。 例如,当我想启用一个button时,我使用下面的代码: Globals.Ribbons.Ribbon1.myButton.Enable = False 这使得在每个打开的工作簿上禁用元素“myButton”,但是我只想为其禁用一个工作簿。 我现在的做法是处理事件WorkbookActivate,以更改function区状态。 问题是:这样,用户在其他不在顶部的工作簿中看到无效状态。 有一些更好的解决方法? 没有办法pipe理function区实例(而不仅仅是像我这样做的全局元素)? 谢谢

VSTO Excel Interop ListObject.AddEx(2010+)到ListObject.Add(2003)转换

作为我正在开发的Excel帮助程序实用程序的一部分,我正在将大型常用Excel电子表格移至MS SQL,以进一步确保性能以及通过SSIS包的数据validation。 作为这个的一部分,我写了一个基本的数据库连接类,模仿数据 – >从其他来源 – >从SQL Serverbutton。 我在家中使用Office 2013的副本在家里工作,我预料到一些转换问题,主要是在Excel Interop API发生变化,升级到Office 2010或更高版本的情况下不可选。 我的主要问题似乎是转换新的命令AddEx: MyListObjects.AddEx(ExcelAPI.XlListObjectSourceType.xlSrcQuery, MyConnection, Type.Missing, ExcelAPI.XlYesNoGuess.xlYes,StartRange); 到2003/2007年版本添加按照MSDN( https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.listobjects.add ( v=office.11 ) .aspx ) // 2007年命令 ExcelAPI.ListObject CurrentTable = MyListObjects.Add(ExcelAPI.XlListObjectSourceType.xlSrcExternal, MyConnection,Type.Missing,ExcelAPI.XlYesNoGuess.xlYes,StartRange); 我得到的例外是: An exception of type 'System.ArgumentException' occurred in mscorlib.dll but was not handled in user code Additional information: The parameter is incorrect. (Exception […]

以编程方式访问Excel中当前选定的XML映射

我正在开发一个Excel AddIn,它需要知道XML Source Pane中当前select的XML Map是什么。 我还没有find任何方式来访问它。 我一直在挖掘微软Office Excel的文档,没有发现任何说这是不可能的。 有人进入了吗?

使用VSTO C#的Excel单元格下拉列表项目是否有任何限制?

我正在使用vsto来创buildexcel加载项。 我将validation添加到单元格,并将其作为Dropdown 。 下拉列表的数据源存在于另一列中。 我正在使用这个代码。 string values = string.Join(",", cellValuesArray); cellRange.Validation.Delete(); cellRange.Validation.Add(Excel.XlDVType.xlValidateList, Excel.XlDVAlertStyle.xlValidAlertStop, Excel.XlFormatConditionOperator.xlBetween, values , Type.Missing); cellRange.Validation.InCellDropdown = true; 现在,如果cellValuesArray包含超过1200(约)的项目,那么它会抛出一个错误说 在mscorlib.dll中发生types“System.Runtime.InteropServices.COMException”的exception,但未在用户代码中处理 附加信息:来自HRESULT的exception:0x800A03EC 如果项目的数量很小,如600-700,它工作正常。 我不知道如何解决这个问题。 那么我怎样才能以这样的方式添加validation,以便我的下拉菜单可以保存超过1K条logging,或者可能比这更高?

在VS7debugging模式下在Web应用程序中添加一个Excel加载项function区的客户端exception错误

我已经发布了一个Web服务(内置VS2010,.NET 4.0)在我的桌面上成功地从我的笔记本电脑IIS7.5赢得7。 C#解决scheme由…组成 MyApp.Host , MyApp.Excel, MyApp.WCF, MyApp.Web, MyAppSetup 现在,我需要在客户端(在我的笔记本电脑上)以debugging模式运行VS2010中的C#代码 。 我已经安装了用于办公室运行时的VS2010工具。 当我的应用程序打开时,它将在Excel 2010中添加一个选项卡(一个加载项)。我已经复制 MyApp.Excel.dll MyApp.Excel.dll.config MyApp.Excel.dll.manifest MyApp.Excel.vsto MyApp.Excel.xlsx Microsoft.Office.Tools.Common.dll Microsoft.Office.Tools.Common.v4.0.Utilities.dll Microsoft.Office.Tools.dll Microsoft.Office.Tools.Excel.dll Microsoft.Office.Tools.Excel.v4.0.Utilities.dll Microsoft.Office.Tools.v4.0.Framework.dll Microsoft.VisualStudio.Tools.Applications.Runtime.dll Microsoft.VisualStudio.Tools.Applications.Runtime.v9.0.dll Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0.dll 到我的C#解决scheme中的文件夹( 在客户端,在我的笔记本电脑上 ) MyApp.Host\bin\debug\ 因为这些文件已发布到我的桌面。 但是,我仍然有错误 ************* Exception Text ************** System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more […]

VSTO Bug – GetVstoObject返回错误的工作表

我正在使用VS2013上的VSTO开发Excel的应用程序级加载项。 我的代码适用于我所有的工作表,除了一个。 我发现函数GetVstoObject正在返回一个不同于作为参数给定的表单。 这是我的即时窗口现在右: ?sheet.Name "Sheet2" ?Globals.Factory.GetVstoObject(sheet).Name "Sheet1" 为什么发生这种情况? 我读了这个返回值只计算一次,对于后面的调用,返回caching的值。 有一些方法可以清除这个caching? 编辑: 在这个工作簿上,我有两张工作表,第一张命名为“Sheet1”,第二张命名为“Sheet2”。 我从来没有重命名或复制这些表中的一个,我刚开始一个新的工作簿,并创build一个额外的工作表。 这是我的代码进行debugging: Dim sheet1 As Microsoft.Office.Interop.Excel.Worksheet = formMapeamento.wb.Worksheets.Item(1) Dim sheet2 As Microsoft.Office.Interop.Excel.Worksheet = formMapeamento.wb.Worksheets.Item(2) Dim sheet1_vsto = Globals.Factory.GetVstoObject(sheet1) Dim sheet2_vsto = Globals.Factory.GetVstoObject(sheet2) Dim sheet1_vsto_inner = sheet1_vsto.InnerObject Dim sheet2_vsto_inner = sheet2_vsto.InnerObject 这是我现在的直接窗口,有更多的数据。 'Checking "Sheet1". Everithing looks as expected ?sheet1.Name "Sheet1" ?sheet1.Index 1 ?sheet1.CodeName […]