所以我在Excel中遇到了这个问题,这似乎只针对Excel 2010。当我从SharePoint位置运行该文件时,不会触发工作簿打开事件。
它是一个Excel COM加载项,我们使用Excel.AppEvents_WorkbookOpenEventHandler
,当工作表打开时,它不会被触发。
这是一个已知问题,有什么方法可以解决它吗?
编辑:
好的家伙,正如我在评论中所说的那样,我原本打算只是为了了解这是一个已知的问题以及我有什么选择,但是因为对于一个完全合法,简短和重点有很多负面反馈问题,我现在将提供所有要求的信息,包括我的最新发现。
它不是VSTO加载项,这是COM加入,是的,我有眼睛看看是否已在安全模式下打开工作表。
所以,我快速创建了一个小规模的加载项来证明这一点,在我的注册表中注册它并在我从我的机器上运行工作簿时测试了OnConnection
方法。但是,当我从SharePoint服务器运行它时,即使OnConnection
方法也没有被调用。
现在我们的原始加载项确实已加载,因为它是一个2部分组件,这就是为什么我认为WorkbookOpen
事件没有触发,但事实证明Excel 2010已运行在某种模式下,阻止加载项在启动时运行。希望这会让事情变得清晰一些,也许你们中的一些人会有另外一个想法。
编辑2:
我刚才意识到有一个人从互联网上下载表格,并认为他正在复制这个问题。我是从SharePoint运行它,这意味着我从它的SharePoint位置打开它,但最简单的复制方法是:
答案 0 :(得分:1)
建议您将COM加载项转换为a VSTO Add-In to future proof it。我知道这是Office2010特定的,但是从Office2013起,COM加载项不是fully supported - 而不管Sharepoint 。
忽略下面,在提供问题的背景之前,它是答案的旧部分....
打开文件时,我的AddIns工作簿打开事件未触发 从Excel on Excel 2010开始,这是一个已知的问题,是否有任何问题 解决它的方法?
您的环境或配置中发生了奇怪的事情,因为我无法使用Excel 2010重现该问题。以下是我的VSTO AddIn代码:
namespace ExcelAddIn1OpenEventFromSharepoint
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.WorkbookOpen +=new Excel.AppEvents_WorkbookOpenEventHandler(Application_WorkbookOpen);
}
private void Application_WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook Wb)
{
if (Globals.ThisAddIn.Application.ActiveWorkbook.Final)
{
System.Windows.Forms.MessageBox.Show("This is a readonly workbook");
}
else
{
System.Windows.Forms.MessageBox.Show("This is read/write workbook");
}
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
//[VSTO Generated Code]
}
}
当我从SPS网站打开工作簿时,我看到了消息框:
请尝试使用相同的vanilla bare bones代码,如果工作簿打开事件仍未触发,请检查信任中心设置:
完成所有设置:
答案 1 :(得分:0)
很可能工作簿在受保护的视图中打开。在这种情况下,您不会触发WorkbookOpen事件。尝试处理在受保护的视图窗口中打开工作簿时触发的Application类的ProtectedViewWindowOpen事件。
以下是MSDN对ProtectedView对象的陈述:
“受保护的视图”窗口用于显示可能不安全的位置的工作簿。不安全的位置定义如下:
“受保护的视图”窗口中显示的工作簿无法编辑,并且无法运行Visual Basic for Applications宏和数据连接等活动内容。有关受保护的视图窗口的详细信息,请参阅What is Protected View?。
要从ProtectedViewWindows集合返回单个ProtectedViewWindow对象,请使用ProtectedViewWindows(Index),其中Index是要打开的窗口的索引号。您还可以使用Application对象的ActiveProtectedViewWindow属性访问表示活动受保护视图窗口的ProtectedViewWindow对象。
访问ProtectedViewWindow对象后,使用Workbook属性访问表示在“受保护的视图”窗口中打开的工作簿文件的Workbook对象。由于受保护的视图窗口旨在保护用户免受潜在的恶意代码的攻击,因此您可以使用ProtectedViewWindow对象返回的Workbook对象执行的操作将受到限制。不允许的操作将返回错误。