在Excel 2010上从SharePoint打开文件时,不会触发工作簿打开事件

时间:2015-03-04 15:28:30

标签: c# .net sharepoint com excel-2010

所以我在Excel中遇到了这个问题,这似乎只针对Excel 2010。当我从SharePoint位置运行该文件时,不会触发工作簿打开事件。

它是一个Excel COM加载项,我们使用Excel.AppEvents_WorkbookOpenEventHandler,当工作表打开时,它不会被触发。

这是一个已知问题,有什么方法可以解决它吗?

编辑:

好的家伙,正如我在评论中所说的那样,我原本打算只是为了了解这是一个已知的问题以及我有什么选择,但是因为对于一个完全合法,简短和重点有很多负面反馈问题,我现在将提供所有要求的信息,包括我的最新发现。

它不是VSTO加载项,这是COM加入,是的,我有眼睛看看是否已在安全模式下打开工作表。

所以,我快速创建了一个小规模的加载项来证明这一点,在我的注册表中注册它并在我从我的机器上运行工作簿时测试了OnConnection方法。但是,当我从SharePoint服务器运行它时,即使OnConnection方法也没有被调用。

现在我们的原始加载项确实已加载,因为它是一个2部分组件,这就是为什么我认为WorkbookOpen事件没有触发,但事实证明Excel 2010已运行在某种模式下,阻止加载项在启动时运行。希望这会让事情变得清晰一些,也许你们中的一些人会有另外一个想法。

编辑2:

我刚才意识到有一个人从互联网上下载表格,并认为他正在复制这个问题。我是从SharePoint运行它,这意味着我从它的SharePoint位置打开它,但最简单的复制方法是: enter image description here

2 个答案:

答案 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网站打开工作簿时,我看到了消息框:

enter image description here

请尝试使用相同的vanilla bare bones代码,如果工作簿打开事件仍未触发,请检查信任中心设置:

enter image description here

完成所有设置:

  1. 受信任的地点
  2. 受信任的文件
  3. 外接程序
  4. 文件拦截
  5. 隐私权选项

答案 1 :(得分:0)

很可能工作簿在受保护的视图中打开。在这种情况下,您不会触发WorkbookOpen事件。尝试处理在受保护的视图窗口中打开工作簿时触发的Application类的ProtectedViewWindowOpen事件。

以下是MSDN对ProtectedView对象的陈述:

“受保护的视图”窗口用于显示可能不安全的位置的工作簿。不安全的位置定义如下:

  • 从Internet打开的文件。 从Microsoft Outlook 2010打开的附件。
  • 文件阻止政策阻止的文件。
  • Office文件验证失败的文件。
  • 使用“打开”对话框中“打开”按钮的“在受保护的视图中打开”命令,在“受保护的视图”中显式打开文件。

“受保护的视图”窗口中显示的工作簿无法编辑,并且无法运行Visual Basic for Applications宏和数据连接等活动内容。有关受保护的视图窗口的详细信息,请参阅What is Protected View?

要从ProtectedViewWindows集合返回单个ProtectedViewWindow对象,请使用ProtectedViewWindows(Index),其中Index是要打开的窗口的索引号。您还可以使用Application对象的ActiveProtectedViewWindow属性访问表示活动受保护视图窗口的ProtectedViewWindow对象。

访问ProtectedViewWindow对象后,使用Workbook属性访问表示在“受保护的视图”窗口中打开的工作簿文件的Workbook对象。由于受保护的视图窗口旨在保护用户免受潜在的恶意代码的攻击,因此您可以使用ProtectedViewWindow对象返回的Workbook对象执行的操作将受到限制。不允许的操作将返回错误。