我的任务是使用RtdServer在C#中编写实时Excel自动化加载项.我非常依赖Stack Overflow中遇到的知识.我决定表达我的感谢,写下如何记录所有我学到的东西.Kenny Kerr的Excel RTD服务器:最小的C#实现文章帮助我入门.我发现Mike Rosenblum和Govert的评论特别有帮助.
我正在尝试使用VBA创建一个新的Excel实例:
__CODE__
问题是这个新的Excel实例没有加载我正常打开Excel时加载的所有插件... Excel Application对象中是否有任何内容可以加载所有用户指定的插件?
我不是试图加载特定的加载项,而是让新的Excel应用程序表现得像用户自己打开它一样,所以我真的在寻找通常加载的所有用户选择的加载项的列表打开Excel时.
我的Excel插件(XLL AddIn,称之为MyAddIn)是使用C#,ExcelDNA,NetOffice,VS2010构建的.客户端有另一个插件(我们称之为B),我想它是用VBA编写的.客户说B没有工作正常MyAddIn.一旦MyAddIn安装,B失败并出现错误:
错误代码:406错误消息:无法从ActiveX DLL,ActiveX控件或属性页在此主机应用程序中显示非模态窗体.
我确实看到了这个Microsoft资源,但我不想告诉客户端Baddin需要改变.我想做点什么来避免这种情况发生在我身边.
以下是报告此问题的步骤:
Excel. MyAddin安装时,它使微软的一个注册表项Excel. Excel,所以Baddin没有启动,Excel工作正常,MyAddIn工作正常. Baddin启动时,它会显示上面显示的406错误.B插件; 禁用MyAddIn是解决方法. Baddin启动时,我们看到MyAddIn在Baddin 之前首先加载,然后得到406错误.MyAddIn,不再遇到此错误,一切正常.Baddin始终打开MyAddin.
Excel来说是一个全球变化,这意味着B即使我们只推出,插件也会一直打开Excel.这是B不可取的,因为addin然后不能让用户使用静态数据,因为Baddin保持实时刷新.这就是Baddin不在注册表设置中输入的原因.因此,注册表更改不是一种选择. …在visual studio中,我有一个Excel 2010加载项目.如何让该项目创建以下模块:

我知道我可以使用该模块保存该工作簿,然后将其与我的添加一起使用.如果我可以让我的插件创建该模块,这将是很好的...
我有这个代码:
OracleConnection con = new OracleConnection("data source=localhost;user id=fastecit;password=fastecit");
con.Open(); string sql="Select userId from tblusers";
OracleCommand cmd = new OracleCommand(sql, con);
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{ messageBox.Show(dr[0].Tostring()); }
Run Code Online (Sandbox Code Playgroud)
两个项目中的代码相同,
在project1"WinForm"工作正常
在project2"Excel 2007插件"出现以下错误:
ORA-12154:TNS:无法解析指定的连接标识符
我正在使用C#.net 2010,office 2007,windows8,oracle 10g.
准备手动连接数据库时,如图所示
Visual Studio,打开View菜单+ Server Explorer.
右键单击数据连接+添加连接+选择Oracle数据库服务器名称:localhost或我的机器名称,设置用户名和密码,然后单击测试连接,测试没有成功.
我在我的应用程序中使用 OpenXml 命名空间。我正在使用它来读取 Excel 文件中的 XML。这适用于某些 excel 文件,但在其他文件上我收到运行时错误说
无效的超链接:格式错误的 URI 作为超链接嵌入到文档中。
我在下一行得到运行时间
using (var spreadsheet =
DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(filePathCopy, true))
Run Code Online (Sandbox Code Playgroud)
我不确定为什么它适用于某些 Excel 文件而不适用于其他文件。
该方案是Windows Server 2012 R2,64位; Excel 2010,32位.许多用户,只有其中几个拥有管理权限.我从内置管理员安装了Power Query.没有询问任何内容,为所有用户安装了加载项; 我的意思是它的设置可以在HKLM下的注册表项中找到,而不是HKCU.
关键是
HKEY_LOCAL_MACHINE -> SOFTWARE -> Wow6432Node -> Microsoft -> Office -> Excel -> AddIns -> Microsoft.Mashup.Client.Excel
而相关的价值是
LoadBehavior (REG_DWORD)
现在只有少数用户真的需要Power Query.每次启动Excel时,我都不希望它为每个人加载.我为LoadBehavior值尝试了一些不同的设置(请参阅此链接).我找到了以下内容:
软件 - > Microsoft - > Office - > Excel - > Addins - > -Microsoft.Mashup.Client.Excel
这一切似乎都很好.现在问题是我需要从VBA过程调用一些Power Query操作.如果已加载Power Query,则一切正常.但如果未加载,即使使用"按需加载"设置,操作也会失败.为了加载Power Query,必须按下Excel GUI上的某个按钮,该按钮调用Power Query操作.
我发现VBA中有一个加载项对象的属性,它指示加载项是否已加载,并且可以设置为从VBA加载或卸载加载项.它是:
Application.COMAddIns.Item("Microsoft.Mashup.Client.Excel").Connect
如果是True,则加载加载项,如果加载,则加载加载False项.
现在应该可以通过将此属性设置为True来加载加载项.但是,在我的方案中情况并非如此:结果是错误(80004005).这似乎是与没有管理权限的用户相关的问题.查看此页面 - 此行为被视为错误.
我将在稍后尝试的最后一个想法是完全删除HKLM下的密钥中的LoadBehavior.我已经检查过这会阻止用户看到加载项,除非创建了特定于用户的密钥,在这种情况下,用户可以自动设置加载项加载行为.我将看到在这种情况下从VBA请求加载时会发生什么.
同时,我很感激任何想法来解决这个问题:Power …
我需要帮助
Tools > Add-ins.ThisWorkbook.IsAddin = True.证明问题:
尝试按如下方式遍历工作簿不会使工作簿具有.AddIn = True:
Dim book As Excel.Workbook
For Each book In Application.Workbooks
Debug.Print book.Name
Next book
Run Code Online (Sandbox Code Playgroud)
通过加载项循环不会获得未注册的加载项:
Dim addin As Excel.AddIn
For Each addin In Application.AddIns
Debug.Print addin.Name
Next addin
Run Code Online (Sandbox Code Playgroud)
循环通过VBProjects集合可以正常工作,但前提是用户在宏安全设置中具有对Visual Basic项目的特别可信访问权限 - 这很少:
Dim vbproj As Object
For Each vbproj In Application.VBE.VBProjects
Debug.Print vbproj.Filename
Next vbproj
Run Code Online (Sandbox Code Playgroud)
但是,如果已知工作簿的名称,则无论是否为加载项,都可以直接引用工作簿:
Dim book As Excel.Workbook
Set book = Application.Workbooks("add-in.xla")
Run Code Online (Sandbox Code Playgroud)
但是,如果名称未知,那么如何获取对此工作簿的引用,并且不能依赖用户的宏安全设置?
我试图在运行时(huzzah)为加载项(双huzzah)创建一些条件格式,并且发现显然某些函数不能像在普通工作表中那样使用.(当我尝试创建引用我可以在单元格中调用的VBA函数的CF时,我只得到一个无效的过程调用错误5,即使它在加载项而不是工作簿中;我可以使用内置函数创建CF罚款在函数中.)我发现最清楚的确认是在这里,但它并没有真正解释问题是什么; 这是深奥的部分,我希望能够更多地了解我对此的期望.
橡胶与道路部分是:我可以完全避免使用VBA,并使用一系列仅限Excel的内置函数来验证给定单元格是否包含常量(即用户输入的值),公式(即某种计算,逻辑运算等 - 几乎以=)或链接(即对另一个工作表或另一个工作簿中的单元格的引用)开始?我知道Excel有这个决心触手可及; 见证GoTo/Special的用途和速度.如何我得到它虽然?
在此先感谢您的帮助.
我正在使用Visual Studio 2010创建Excel加载项.我想在用户单击组合键时运行一些代码.
这是我得到的代码
Public Class CC
Private Sub ThisAddIn_Startup() Handles Me.Startup
EnableShortCut()
End Sub
Sub A1()
MsgBox "A1"
End Sub
Sub A2()
MsgBox "A2"
End Sub
Sub A3()
MsgBox "A3"
End Sub
Public Sub EnableShortCut()
With Application
.OnKey "+^{U}", "A1" 'action A1 should be performed when user clicks Ctrl + Shift + U
.OnKey "+^{L}", "A2" 'action A2 should be performed when user clicks Ctrl + Shift + L
.OnKey "+^{P}", "A3" 'action A3 should be performed when user …Run Code Online (Sandbox Code Playgroud) excel-addins ×10
excel ×6
c# ×5
vba ×5
excel-vba ×3
vsto ×2
activex-exe ×1
add-in ×1
excel-udf ×1
openxml ×1
oracle ×1
powerquery ×1
rtd ×1
vb.net ×1