标签: excel-addins

如何使用RtdServer在C#中创建实时Excel自动化加载项?

我的任务是使用RtdServer在C#中编写实时Excel自动化加载项.我非常依赖Stack Overflow中遇到的知识.我决定表达我的感谢,写下如何记录所有我学到的东西.Kenny Kerr的Excel RTD服务器:最小的C#实现文章帮助我入门.我发现Mike RosenblumGovert的评论特别有帮助.

c# vsto rtd excel-addins excel-udf

25
推荐指数
2
解决办法
2万
查看次数

以编程方式实例化Excel时加载插件

我正在尝试使用VBA创建一个新的Excel实例:

__CODE__

问题是这个新的Excel实例没有加载我正常打开Excel时加载的所有插件... Excel Application对象中是否有任何内容可以加载所有用户指定的插件?

我不是试图加载特定的加载项,而是让新的Excel应用程序表现得像用户自己打开它一样,所以我真的在寻找通常加载的所有用户选择的加载项的列表打开Excel时.

excel vba excel-addins

15
推荐指数
2
解决办法
2万
查看次数

使用VBA和ActiveX插件时出现Excel错误406.

我的Excel插件(XLL AddIn,称之为MyAddIn)是使用C#,ExcelDNA,NetOffice,VS2010构建的.客户端有另一个插件(我们称之为B),我想它是用VBA编写的.客户说B没有工作正常MyAddIn.一旦MyAddIn安装,B失败并出现错误:

错误代码:406错误消息:无法从ActiveX DLL,ActiveX控件或属性页在此主机应用程序中显示非模态窗体.

我确实看到了这个Microsoft资源,但我不想告诉客户端Baddin需要改变.我想做点什么来避免这种情况发生在我身边.

以下是报告此问题的步骤:

  1. 安装B addin时,它不会为Microsoft创建任何注册表项Excel.
  2. MyAddin安装时,它使微软的一个注册表项Excel.
  3. 这里的注册表项基本上告诉addin应该在启动时打开Excel,所以Baddin没有启动,Excel工作正常,MyAddIn工作正常.
  4. 现在,当Baddin启动时,它会显示上面显示的406错误.
  5. 我们可以忽略错误并继续使用B插件; 禁用MyAddIn是解决方法.
  6. Baddin启动时,我们看到MyAddInBaddin 之前首先加载,然后得到406错误.
  7. 卸载时MyAddIn,不再遇到此错误,一切正常.
  8. 要删除此错误,我们尝试更改注册表顺序以使Baddin始终打开MyAddin.
    • 这是有效的,但这对微软Excel来说是一个全球变化,这意味着B即使我们只推出,插件也会一直打开Excel.这是B不可取的,因为addin然后不能让用户使用静态数据,因为Baddin保持实时刷新.这就是Baddin不在注册表设置中输入的原因.因此,注册表更改不是一种选择. …

c# vba excel-vba activex-exe excel-addins

12
推荐指数
1
解决办法
607
查看次数

将用户定义的函数添加到Visual Studio Excel加载项

在visual studio中,我有一个Excel 2010加载项目.如何让该项目创建以下模块:

在此输入图像描述

我知道我可以使用该模块保存该工作簿,然后将其与我的添加一起使用.如果我可以让我的插件创建该模块,这将是很好的...

c# excel user-defined-functions excel-addins

12
推荐指数
2
解决办法
4728
查看次数

这是错误ORA-12154:TNS:无法解析指定的连接标识符?

我有这个代码:

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或我的机器名称,设置用户名和密码,然后单击测试连接,测试没有成功.在此输入图像描述

c# oracle excel-addins

12
推荐指数
2
解决办法
14万
查看次数

无效的超链接:格式错误的 URI 作为超链接嵌入到文档中

我在我的应用程序中使用 OpenXml 命名空间。我正在使用它来读取 Excel 文件中的 XML。这适用于某些 excel 文件,但在其他文件上我收到运行时错误说

无效的超链接:格式错误的 URI 作为超链接嵌入到文档中。

我在下一行得到运行时间

using (var spreadsheet = 
      DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(filePathCopy, true))
Run Code Online (Sandbox Code Playgroud)

我不确定为什么它适用于某些 Excel 文件而不适用于其他文件。

c# openxml excel-addins

11
推荐指数
1
解决办法
5079
查看次数

Excel:需要从VBA宏加载Power Query加载项

该方案是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值尝试了一些不同的设置(请参阅链接).我找到了以下内容:

  • 如果LoadBehavior = 2,则不会为任何用户加载加载项.
  • 如果LoadBehavior = 3,则为所有用户加载加载项.但是,如果我为特定用户(在注册表中)创建特定密钥,则用户可以从Excel禁用该加载项.例如,在HKEY_CURRENT_USER中,密钥的路径是:

软件 - > Microsoft - > Office - > Excel - > Addins - > -Microsoft.Mashup.Client.Excel

  • 更具体地说,将用户密钥放入LoadBehavior值就足够了,这允许用户决定是否要加载加载项.值3表示"加载",值2表示"无负载".
  • 我需要恰恰相反:加载项通常不加载,一些用户允许加载它.我发现可以将HKLM中的LoadBehavior设置为9.这意味着"按需加载".即,仅当用户需要操作时才加载加载项,具体取决于加载项本身.对我来说很好.
  • 此时,我可能会忽略特定用户的密钥(例如,在HKCU中).但是,我发现如果我创建它,它优先于HKLM(当后者具有LoadBehavior = 9时).因此,对于特定用户,可以决定在"始终加载"模式下使用加载项.只需在HKCU下的密钥中设置LoadBehavior = 3即可.

这一切似乎都很好.现在问题是我需要从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 …

excel vba excel-addins powerquery

10
推荐指数
1
解决办法
639
查看次数

迭代未注册的加载项(.xla)

我需要帮助

  • 弄清楚如何使用菜单路径迭代尚未在Excel中注册的当前打开的Excel加载项文件(.xla)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)

但是,如果名称未知,那么如何获取对此工作簿的引用,并且不能依赖用户的宏安全设置?

excel vba add-in excel-vba excel-addins

9
推荐指数
1
解决办法
3923
查看次数

用于检查单元格内容的Excel公式

我试图在运行时(huzzah)为加载项(双huzzah)创建一些条件格式,并且发现显然某些函数不能像在普通工作表中那样使用.(当我尝试创建引用我可以在单元格中调用的VBA函数的CF时,我只得到一个无效的过程调用错误5,即使它在加载项而不是工作簿中;我可以使用内置函数创建CF罚款在函数中.)我发现最清楚的确认是在这里,但它并没有真正解释问题是什么; 这是深奥的部分,我希望能够更多地了解我对此的期望.

橡胶与道路部分是:我可以完全避免使用VBA,并使用一系列仅限Excel的内置函数来验证给定单元格是否包含常量(即用户输入的值),公式(即某种计算,逻辑运算等 - 几乎以=)或链接(即对另一个工作表或另一个工作簿中的单元格的引用)开始?我知道Excel有这个决心触手可及; 见证GoTo/Special的用途和速度.如何得到它虽然?

在此先感谢您的帮助.

excel vba excel-vba excel-addins

8
推荐指数
1
解决办法
9587
查看次数

如何在使用Visual Studio 2010创建的Excel加载项中执行.Onkey事件?

我正在使用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)

vb.net excel vsto visual-studio excel-addins

8
推荐指数
1
解决办法
7453
查看次数