C# 在Excel 2010上从SharePoint打开文件时未触发工作簿打开事件

C# 在Excel 2010上从SharePoint打开文件时未触发工作簿打开事件,c#,.net,sharepoint,com,excel-2010,C#,.net,Sharepoint,Com,Excel 2010,所以我在Excel中遇到了这个问题,这似乎只适用于Excel 2010。从SharePoint位置运行文件时,不会触发工作簿打开事件 这是一个Excel COM加载项,我们使用的是Excel.AppEvents\u WorkbookOpenEventHandler,当工作表按原样打开时,不会触发该加载项 这是一个已知的问题,有没有办法解决 编辑: 好吧,伙计们,正如我在评论中所说的,我最初只想知道这是否是一个已知的问题,我有什么选择,但由于有很多关于一个完全合法、简短和切中要害的问题的负面反馈,

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

这是一个Excel COM加载项,我们使用的是
Excel.AppEvents\u WorkbookOpenEventHandler
,当工作表按原样打开时,不会触发该加载项

这是一个已知的问题,有没有办法解决

编辑:

好吧,伙计们,正如我在评论中所说的,我最初只想知道这是否是一个已知的问题,我有什么选择,但由于有很多关于一个完全合法、简短和切中要害的问题的负面反馈,我现在将提供所有要求的信息,包括我的最新发现

这不是一个VSTO插件,这是一个COM插件,是的,我有眼睛看看是否在安全模式下打开了工作表

因此,我快速创建了一个小规模的加载项来证明这一点,在我的注册表中注册了它,并在我从机器上运行工作簿时测试了
OnConnection
方法。然而,当我从SharePoint服务器运行它时,甚至连
OnConnection
方法都没有被调用

现在我们的原始外接程序确实加载了,因为它是一个由两部分组成的组件,这就是为什么我认为只有
WorkbookOpen
事件没有启动,但事实证明Excel 2010是在某种模式下运行的,这会阻止外接程序在启动时运行。希望这能把事情弄清楚一点,也许你们中的一些人会有另外一两个想法

编辑2:

我刚意识到有一个人从网上下载了这张纸,以为他在复制这个问题。我是从SharePoint运行它的,这意味着我是从它的SharePoint位置打开它的,但最简单的复制方法是:
建议您将COM加载项转换为。我知道这是特定于Office2010的,尽管从Office2013开始,COM加载项不适用于Sharepoint


忽略以下内容,在提供问题背景之前,这是答案的一部分….

打开文件时未触发“我的加载项工作簿打开”事件 从Excel 2010上的SharePoint,这是一个已知问题吗?是否存在任何问题 如何解决这个问题

您的环境或配置中出现了一些奇怪的情况,因为我无法使用Excel 2010重现该问题。以下是我的VSTO加载项代码:

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站点打开工作簿时,我会看到messagebox:

请尝试相同的基本代码,如果工作簿打开事件仍然没有触发,请检查您的信任中心设置:

检查所有设置:

  • 可信位置
  • 可信文件
  • 艾丁
  • 文件阻塞
  • 隐私选项

  • 很可能工作簿是在受保护视图中打开的。在这种情况下,将不会触发WorkbookOpen事件。尝试处理在受保护的视图窗口中打开工作簿时触发的应用程序类事件

    以下是MSDN为ProtectedView对象声明的内容:

    受保护的视图窗口用于显示来自潜在不安全位置的工作簿。不安全位置定义如下:

    • 从Internet打开的文件。 从Microsoft Outlook 2010打开的附件
    • 文件阻止策略阻止的文件
    • Office文件验证失败的文件
    • 使用“打开”对话框中“打开”按钮的“在受保护视图中打开”命令在受保护视图中显式打开的文件
    在受保护的视图窗口中显示的工作簿无法编辑,并且被限制运行活动内容,例如Visual Basic for Applications宏和数据连接。有关受保护视图窗口的详细信息,请参阅

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


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

    我刚刚测试了这个问题,无法重现您的问题。当使用Excel 2010从Sharepoint打开时,
    Workbook\u Open
    事件按预期工作。如果我不清楚,很抱歉,这不是关于Workbook\u Open宏,而是关于
    Excel.AppEvents\u WorkbookOpenEventHandler
    。我们有一个Excel的C#外接程序。这确实是非常不清楚和混乱的。请在问题本身中说明问题,而不是在评论中。你的问题可以通过点击“编辑”链接进行编辑。当然,我知道如何编辑我的问题,但我真的不希望有人能解决这个问题。它的目的是让某人告诉我这是否是一个已知的问题,我想不是,我可能会向Microsoft提交一份错误报告……呃,你不希望有人提出解决方案吗?那你为什么还要问这个问题?这不是一个VSTO加载项。哈:抱歉,如果我不清楚的话,这不是关于工作簿\u Open宏,而是关于
    Excel.AppEvents\u WorkbookOpenEventHandler
    。我们有一个Excel的C#加载项。-它是VSTOOr还是COM加载项?它是COM可见加载项。这不是VSTO。那么您还有什么可以分享的东西可以帮助我们帮助您吗?你尝试过信任中心设置吗?向我们展示您的屏幕截图设置?你做得不容易我需要一些时间来检查这一点,但受保护的工作簿不会尖叫它受保护了吗?不,