Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查我是否在版本2010201302016&;中的Word应用程序的打印预览中&;2019_C#_Ms Word_Office Interop_Word Automation - Fatal编程技术网

C# 如何检查我是否在版本2010201302016&;中的Word应用程序的打印预览中&;2019

C# 如何检查我是否在版本2010201302016&;中的Word应用程序的打印预览中&;2019,c#,ms-word,office-interop,word-automation,C#,Ms Word,Office Interop,Word Automation,我试图用两种方法检查我是否在打印预览(ctrl+p)中,但它们都不能在上述版本的office上工作 我获取活动Word AppApplication对象的函数是: using WordApi = Microsoft.Office.Interop.Word; public static WordApi.Application getActiveObject() { WordApi.Application ap; try

我试图用两种方法检查我是否在打印预览(ctrl+p)中,但它们都不能在上述版本的office上工作

我获取活动Word AppApplication对象的函数是:

using WordApi = Microsoft.Office.Interop.Word;

public static WordApi.Application getActiveObject()
        {
            WordApi.Application ap;
            try 
            {
                ap = (WordApi.Application)Marshal.GetActiveObject("Word.Application");
            }
            catch (Exception ex)
            {
                ap = null; // this is important
            }
            return ap;
        }


Is应该以两种方式工作,尤其是block 1,但它不能。它只在7号办公室工作。有什么想法吗?

在Office应用程序中显示“打印预览”窗口时,功能区内置控件将隐藏在“打印预览”窗口下(或在某些情况下禁用),即显示后台UI。因此,您可以在功能区上找到任何内置控件,并检查其和/或属性

例如,以下VBA代码检查控件在任何时间点是否可见:

Public Sub test()
 MsgBox Application.CommandBars("Standard").Controls("New").Visible
End Sub

打印预览
页面打开时,您将找不到此类命令栏、控件,或者可以简单地禁用或隐藏它们


本文将深入介绍这种方法。它与Excel相关,但这种方法可以应用于任何Office应用程序。

ap.PrintPreview
适合我。
catch
块是否出现错误?如何在项目中定义
getActiveObject
?这似乎不是.NET方法,因为它完全缺少必要的参数,所以我们不知道它在做什么,也不知道
ap
是否真的是一个运行的Word.Application对象。我建议您在没有所有“助手”的情况下设置一个新项目。您当前的项目显然必须测试基本对象模型代码,然后在当前项目中查找“断开连接”我无法理解您建议我做什么。例如,当您看到我的
getActiveObject()
,您建议我如何获取“真实”对象?顺便说一句,我的libs:
使用WordApi=Microsoft.Office.Interop.Word好,使用
帮助:-)然后该行正在执行它应该执行的操作。我需要再想想……在问题中,你说“它不起作用”,但你没有准确描述它是如何不起作用的。
结果
返回什么?总是
false
?尝试一个新的WinForms项目,只需一个按钮,即可获取Word.Application并测试打印预览。没什么特别的。我的测试——有效——看起来是这样的,例如:私有的void按钮2_-Click(objectsender,EventArgs e){
WordApi.Application ap=(WordApi.Application)Marshal.GetActiveObject(“Word.Application”);Debug.Print(ap.PrintPreview.ToString();}
,打印预览窗口不影响功能区的“已启用”或“可见”属性。但是这个主意很好。你还有别的吗?你走错路了。当您转到“打印”部分时,后台UI将打开,功能区将隐藏。您尝试使用哪个控件来检查
可见的
启用的
属性?
ap.commandbar[“Ribbon”]。启用的
ap.commandbar[“Ribbon”]。可见的
在带有idMso
Ribbon的功能区上没有控件。您能详细告诉我在我的情况下该怎么办吗?我欣赏你的方法
//block 2
public static bool printPreview()
        {
            bool result = false;
            WordApi.Application ap = getActiveObject();
            try
            {
                if (ap.PrintPreview())
                {
                    result = true;
                }
            }
            catch (Exception ex)
            {
                MyLogger.Error(ex.ToString());
            }
            finally
            {
                if (ap != null)
                {
                    Marshal.ReleaseComObject(ap);
                }
            }
            return result;
        }
Public Sub test()
 MsgBox Application.CommandBars("Standard").Controls("New").Visible
End Sub