单击确定后,Excel打印对话框将打开不需要的Excel实例

时间:2011-03-24 16:37:22

标签: c# excel printing interop

我正在使用xlApp.Dialogs[Excel.XlBuiltInDialog.xlDialogPrint].Show()向用户显示打印对话框,以打印以编程方式创建的Excel工作簿的内容。

用户单击“确定”后,打印部分工作正常。但是,除了打印之外,程序还会打开并显示Excel的实例。这不是打印预览,而是打开并显示给用户的实际Excel文档。

我的目标是向用户显示打印对话框,允许他们在不显示Excel的情况下进行打印。

我看了here,试图找到某种禁用打开Excel的方法或参数。不幸的是,我发现的是我可以提供带有30个参数的.Show(),但不是哪个参数对应于什么设置。

我无法在SO上找到任何东西,而且我今天的谷歌技能似乎让我失望。

更新:我的代码中的'Excel'是别名:using Excel = Microsoft.Office.Interop.Excel;

我找到了Built-In Dialog Box Argument Lists。看看“xlDialogPrint”我猜这些是进入.Show()的论据。但是,此列表中的任何内容似乎都无法阻止Excel打开。

另一个更新:重现行为的最简单代码

Excel.Application xlApp;
Excel.Workbook xlWB;
Excel.Worksheet xlWS;
xlApp = new Excel.Application();
xlWB = xlApp.Application.Workbooks.Add();
xlWS = xlWB.Sheets[1];
xlWS.Cells[1][1] = "TEST";
xlApp.Dialogs[Excel.XlBuiltInDialog.xlDialogPrint].Show();

2 个答案:

答案 0 :(得分:1)

您可以尝试添加

xlApp.Visible = False

后:

xlApp.Dialogs[Excel.XlBuiltInDialog.xlDialogPrint].Show(); 

我没有测试过,但可能会有效。

但是,您仍然会在后台运行Excel实例 - 要关闭它,您需要调用xlApp.Quit,并且还要注意this KB article中描述的问题。

答案 1 :(得分:1)

这很难看,但您可以在显示对话框之前添加以下行

var last_height = xlApp.Height,
    last_width = xlApp.Width;
xlApp.Height = 0;
xlApp.Width = 0;

以及关闭Excel之前的以下内容

xlApp.Visible = false;
xlApp.Height = last_height;
xlApp.Width = last_width;

我是用JScript编写的,但它很容易翻译。