【问题标题】:How to hide Excel ribbon by creating a new Excel application using C#?如何通过使用 C# 创建新的 Excel 应用程序来隐藏 Excel 功能区?
【发布时间】:2023-10-17 06:25:01
【问题描述】:

我创建了一个新的 Excel 应用程序:

Microsoft.Office.Interop.Excel.Application application = new Excel.Application();

现在,我想完全隐藏此应用程序中的功能区(即不让 Excel 用户再次显示此功能区)。我该怎么做?

我找到了一种解决方案:

application.ExecuteExcel4Macro("SHOW.TOOLBAR(\"Ribbon\",False)");

但我想找到一种更优雅的方式,而不是使用宏。有没有可能?

【问题讨论】:

标签: c# excel hide office-interop ribbon


【解决方案1】:

试试这个:

If Application.ExecuteExcel4Macro("Get.ToolBar(7,""Ribbon"")") Then
    Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"", False)"
Else
    Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"", True)"
End If

...来自另一个来源。没有宏不知道怎么做。

【讨论】:

    【解决方案2】:

    您可以尝试使用Microsoft Active Accessibility

    【讨论】:

      【解决方案3】:

      我的解决方案不是那么优雅,但它可以在没有宏的情况下完成你想要的。

      您需要以下参考资料:

      • 使用 Microsoft.Office.Interop.Excel;
      • 使用 System.Runtime.InteropServices;
      • 使用 System.Diagnostics;
      • 使用 System.Diagnostics;

      将此代码添加到您的课程中:

          [DllImport("user32.dll")]
          static extern bool SetForegroundWindow(IntPtr hWnd);
      
          private static void OpenExcelWithoutRibbon() {
      
              Application excelApp = new Application();
              excelApp.Visible = true;
      
              Process prc = Process.GetProcessesByName("EXCEL").First();
      
              prc.WaitForInputIdle();
              IntPtr h = prc.MainWindowHandle;
              SetForegroundWindow(h);
              System.Windows.Forms.SendKeys.SendWait("^{F1}");            
          }
      

      在我的 PC 上,Excel 在进程名称“EXCEL”下运行,在其他 PC 上可能会有所不同(如“excel”或“Excel”)。如果没有找到,请检查它。

      【讨论】:

      • 对不起,我打错了,您需要的最后一个参考是 System.Windows.Forms ;)
      • Excel 在方法完成后立即关闭,因此在测试代码时添加 Console.ReadKey();或类似的东西以防止它关闭。
      • 谢谢你,阿提拉。但在这种情况下,Excel 用户将能够通过按 Ctrl+F1 将功能区返回,但这种行为是不可取的(功能区必须永远隐藏)。
      最近更新 更多