Диалоговое окно печати Excel открывает нежелательный экземпляр Excel после нажатия OK - PullRequest
3 голосов
/ 24 марта 2011

Я использую xlApp.Dialogs[Excel.XlBuiltInDialog.xlDialogPrint].Show(), чтобы показать пользователю диалоговое окно печати для печати содержимого книги Excel, созданной программным способом.

Печатная часть работает нормально после того, как пользователь нажимает кнопку ОК. Однако, помимо печати, программа также открывает и отображает экземпляр Excel. Это не предварительный просмотр, а фактический документ Excel, который открывается и отображается пользователю.

Моя цель - показать пользователю диалоговое окно печати, позволяющее печатать без отображения Excel.

Я посмотрел здесь , чтобы найти какой-то метод или аргумент, чтобы отключить открытие Excel. К сожалению, все, что я обнаружил, я могу предоставить .Show () с 30 аргументами, но не то, какой аргумент соответствует какому параметру.

Я не смог ничего найти на SO, и мои навыки работы с Google, похоже, подводят меня сегодня.

Обновление : 'Excel' в моем коде является псевдонимом: using Excel = Microsoft.Office.Interop.Excel;

Мне удалось найти Списки аргументов встроенного диалогового окна . Глядя на «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 ]

1 голос
/ 15 сентября 2012

Это некрасиво, но вы можете добавить следующие строки перед тем, как отобразить диалоговое окно

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, но это легкоперевести.

1 голос
/ 24 марта 2011

Вы можете попробовать добавить

xlApp.Visible = False

после

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

Я не проверял, но это может сработать.

Однако у вас все еще будет работать экземпляр Excel в фоновом режиме - чтобы закрыть его, вам потребуется вызвать xlApp.Quit, а также знать о проблеме, описанной в этой статье базы знаний .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...