我有一个工作表,偶尔由用户更新,用于制作加载项(.XLAM)。加载项位于网络共享上,并且用户链接到该共享。我希望使用户能够轻松更新此加载项(确保将其标记为只读)
我在这里看到了Ken Puls的有关部署Excel加载项的文章,但是.SaveCopyAs他使用的方法似乎无法接受文件类型。
该.SaveAs方法可以,但是当尝试此操作时,我收到一条消息,指出文件格式或扩展名无效,我已经尝试使用.XLAM和.XLA进行如下操作。
DeployPath = "C:\Menu.xlam"
.SaveAs Filename:=DeployPath, ReadOnlyRecommended:=True, FileFormat:=xlOpenXMLAddIn
Run Code Online (Sandbox Code Playgroud)
在这方面的任何帮助将不胜感激。
我有一个带有多个功能区的 Excel 插件,一个功能区是设置窗口。单击它时,将显示一个自定义窗口。但是,单击时没有任何显示。我在日志文件中看到以下异常。是什么原因导致这种情况以及如何解决?多谢
2012-04-09 09:59:50,161 [1] 错误助手 [(null)] - Name:TypeInitializationException 消息:“System.Windows.Window”的类型初始值设定项引发异常。 目标:Void .ctor() 堆栈:在 System.Windows.Window..ctor() 在 MyShared.View.ConnectionSetup..ctor() 在 MyAddIn.Connect.GetSettings() 在 MyAddIn.Connect.BtnClick(IRibbonControl 控件) 名称:类型初始化异常 消息:“System.Windows.FrameworkElement”的类型初始值设定项引发异常。 目标:Void .cctor() 堆栈:在 System.Windows.Window..cctor() 名称:类型初始化异常 消息:“System.Windows.Documents.TextElement”的类型初始值设定项引发异常。 目标:Void .cctor() 堆栈:在 System.Windows.FrameworkElement..cctor() 名称:类型初始化异常 消息:“MS.Internal.FontCache.Util”的类型初始值设定项引发异常。 目标:Int32 get_Dpi() 堆栈:在 MS.Internal.FontCache.Util.get_Dpi() 在 System.Windows.SystemFonts.ConvertFontHeight(Int32 高度) 在 System.Windows.Documents.TextElement..cctor() 名称:UriFormatException 消息:无效的 URI:无法确定 URI 的格式。 目标:Void CreateThis(System.String, Boolean, System.UriKind) 堆栈:在 System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) 在 System.Uri..ctor(String uriString, UriKind uriKind) 在 MS.Internal.FontCache.Util..cctor()
编辑,这里是xaml代码
<Window x:Class="MyShared.View.ConnectionSetup"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:Converter="clr-namespace:MIMICShared.Converter"
WindowStartupLocation="CenterOwner"
Title="Settings" Width="446" Height="650" Closing="WindowClosing" …Run Code Online (Sandbox Code Playgroud) 我正在excel VSTO加载项中显示一个自定义任务窗格,正在构建它并显示为:
var ctrl = new CellTaskPane();
var pane = CustomTaskPanes.Add(ctrl, "Custom Sheet");
pane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight;
pane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;
pane.Visible = true;
Run Code Online (Sandbox Code Playgroud)
这是在ThisAddin.cs文件中完成的,并且在Debug会话下以及通过单击一次安装程序安装的加载项下,都可以在我的计算机上正常运行。
但是,将加载项安装到同事的机器上被证明很麻烦。
加载项正在运行,并且上下文菜单/功能区运行正常,但是窗格只是拒绝显示。
我在功能区上有一个切换按钮,可以切换Visible窗格上的属性,甚至单击也不会强制窗格显示。
任何帮助都将不胜感激,谷歌对此毫无用处。
谢谢。
我应该提一下,这CellTaskPane只是UserControlMSDN上的文档所规定的:http : //msdn.microsoft.com/en-us/library/aa942846.aspx
有关处理此问题的最佳做法的任何建议?
我编写了一个Excel加载项,它提供了UDF(用户定义的工作表函数).一切都很好,直到一个用户将他的工作簿使用这些函数发送给另一个用户,或者只是尝试在多台计算机上使用工作簿,其中加载项已安装到不同的路径.
即使路径中唯一的区别是驱动器号,当在另一台计算机上打开工作簿时,旧的完整路径将出现在所有UDF前面的公式中,并且公式会返回错误.
解决这个问题的一种方法是搜索和替换工作簿中的所有公式,用空字符串替换路径.然后公式为当前计算机上的加载项路径重置自己.有时我必须进入VBE并运行CalculateFullRebuild以使公式起作用.虽然它有效,但对技术含量较低的用户要求很多,而且对于那些经常移动工作簿的用户来说,经常这样做是很烦人的.
建议?
另外 - COM加载项有这个问题吗?我的加载项是xla.虽然我对此感到好奇,但在这种情况下这是一个没有实际意义的问题,因为COM加载项在Macintosh Excel上不起作用,我需要这个加载项才能跨平台工作.
更新:
根据要求,这是一个截图:
屏幕截图显示了公式http://i62.tinypic.com/axz68n.png中的路径
这个截图显示了如果Fred将加载项放在C:\ Fred的Stuff\Fred的Excel Stuff\MyAddin.xla中,将他的工作簿发送给Martha,后者将相同的加载项放在另一个路径中,例如C: \玛莎的文件\玛莎的Excel文件\ MyAddin.xla,玛莎打开弗雷德发送的文件.
如果Martha删除路径,在公式中只留下"= MyUDF()",Excel将在Martha的路径中找到Martad计算机上的MyAddin.xla(假设她以前在Excel中安装了MyAddin.xla作为加载项) ),并正确解决公式.
启动Excel并打开VBE ALT+ F11.
查找Tools并单击References.
向下滚动直到找到Microsoft Scripting Runtime并勾选它.
将文件保存为Addin.xlam默认位置,该位置应为:
C:\Users\username\AppData\Roaming\Microsoft\AddIns
关闭此Excel实例
启动一个新实例并打开VBE(您现在应该看到 第二个VBA项目可用于工作簿.如果您没有打开选项卡,那么加载项并勾选名称旁边的框以打开它 - 保存,关闭,打开一个新的Excel实例)Addin.xlam Developer
添加新的标准模块
打开References,您应该只看到4个勾选(默认)
向下滚动并尝试查找Microsoft Scripting Dictionary- 它不存在!?
因此,这基本上意味着您无法添加对新VBA项目(Book1)的引用,因为您*.xlam已经在使用它
但
Scripting因为尝试你不能交叉使用库
Dim d as Dictionary
Run Code Online (Sandbox Code Playgroud)
在新创建Module1失败,因为它不识别Dictionary对象....
这是一个我从未意识到的已知错误或者我完全忽略了什么?任何解决方法?
我试图自动添加和安装加载项位于共享网络驱动器上的Excel加载项.我从网上(这里和这里)的阅读中知道,我需要将共享网络驱动器上的副本设为只读.感谢第一个链接,我现在知道如何使用这种将文件保存在共享网络驱动器上的方法来对我的插件进行修改,修复和添加.
现在了解了这个过程,我开始研究如何在共享网络驱动器上自动添加和安装加载项.我遇到了这篇文章,它指出了使用Excel.AddIn对象的正确方向.所以,我花了一些时间查看AddIn Object属性上的msdn文档(Installed Property和AddIn Object本身),我在这里找到了一些代码,用于在一行中添加和安装外接程序
AddIns.Add("generic.xll").Installed = True
Run Code Online (Sandbox Code Playgroud)
我的问题(和关注):
在下面的说明中

Bullet point 5让我有点担心,因为如果使用上面的代码片段来添加和安装Add-In,我无法通过我在网上挖掘找到它将其复制到本地/用户的文件夹(我不知道) t)),将它保存在共享网络文件夹中,或者它是否会提示用户就像他们手动浏览添加加载项一样.如果它提示他们有没有办法选择他们(总是点击'否')或有没有办法选择'否'而没有向他们显示提示?如何使用上面的代码并确保它添加并安装该共享网络驱动器上的加载项文件?任何人都可以为我解释这种情况吗?
我试图从工作簿中的命名项目读取范围,但出现错误:
当前对象不允许此操作。
首先创建名称范围(使用add()名称对象上的方法)。
Excel.run(function (ctx) {
var sheet = ctx.workbook.names.add("MyRange", "Sheet1!A1B2");
return ctx.sync().then(function () {
console.log("range name added");
}).catch(function (e) {
console.log("Error Message is -> " + e.message);
})
});
Run Code Online (Sandbox Code Playgroud)
直到现在代码工作得很好。现在我想读取现有命名范围的范围。所以我对我的代码做了一些修改:
Excel.run(function (ctx) {
var sheet = ctx.workbook.names.add("MyRange", "Sheet1!A1B2");
return ctx.sync().then(function () {
console.log("range name added");
var range = ctx.workbook.names.getItem("MyRange").getRange();
range.load("address");
return ctx.sync().then(function () {
console.log(range.address);
});
});
}).catch(function (e) {
console.log("Error Message is -> " + e.message);
});
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此代码时,出现上述错误。我使用了与 Office.js API 中提到的相同的方法。
我正在开发/测试Excel加载项。我使用此处概述的“共享文件夹目录”过程将其添加到了桌面版本:
我为新的功能区命令更新了清单XML,但没有更新Excel。我无法更新/删除/重新安装从“共享文件夹”安装的加载项。我尝试删除外接程序目录,然后在“信任中心设置”中重新添加它,但这没有用。
使用 Visual Studio 2017 C# Excel 2016/2019 Web 插件模板,我尝试创建一个基本插件来“将内容插入 Excel 电子表格 [VS 项目选项]”。
当我运行项目并显示以下消息时,我在 Excel 中的所有尝试都失败了:“加载项错误无法启动此加载项。” 关闭此对话框以忽略该问题,或单击“重新启动”重试。单击“重新启动”会在 Excel 中显示一个永远不会完成的“正在加载”对话框。
我尝试了以下所有步骤来解决此问题,但均未成功:
此外,我还确保 localhost SSL 证书是受信任的,并且我可以浏览到 IIS Express 站点而不会出现安全警告。
我应该指出,这个问题仅发生在 VS2017 模板中。如果我使用节点并旁加载加载项,则在这台特定的开发计算机上没有任何问题。
我的问题是:
我开始编写一个加载项,用于搜索和查看 Office Fluent 功能区的内置图标/图像 (imageMso),以找到适合添加到新按钮的内容。是的,我知道有很多,但我还没有发现任何特别有用的。我最终花了几个小时或几天的时间试图找到符合目的的东西。
有谁知道图标是如何存储的或者它们来自哪里?它们是否在一个可访问的集合中,并且可以沿着...的方式循环访问?
For each img in imageMso
Run Code Online (Sandbox Code Playgroud)
手动加载它们时,我遇到了VBA中单个模块大小的限制,因此需要有很多模块,然后在每个版本的office发布时重新编写。