Нахождение диалогового окна предварительного просмотра Excel в C#, которое позволяет пользователю сменить принтер

Я делаю автоматизацию Office из приложения C# в Excel. Я пытаюсь открыть диалоговое окно предварительного просмотра (или диалоговое окно для предварительного просмотра). Я также хочу, чтобы у пользователя была возможность выбрать другой шрифт, отличный от печати по умолчанию.

я пытался

sheet1.PrintPreview();

а также

sheet1.PrintOutEx(1, 1, 1, true);

но я не вижу способа для пользователя выбрать другой принтер.

2 ответа

Да, есть встроенный диалог для вашего приложения Windows. Если у вас есть ссылка на автоматизацию Excel Application объект, вы сможете вызвать почти любой встроенный диалог, доступный в Excel.

2 ссылки, которые могут оказаться полезными:

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.dialogs.aspx

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlbuiltindialog.aspx

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

var excelApp = new Excel.Application();
bool dialogResult =    
    excelApp.Dialogs[Excel.XlBuiltInDialog.xlDialogPrintPreview].Show(
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

Вы меняете принтер по умолчанию для объекта Application, а затем распечатываете лист, как показано ниже. Принтеры, установленные на компьютере, можно получить из System.Drawing.Printing.PrinterSettings.InstalledPrinters а затем отобразить их пользователю в каком-то диалоге, а затем установить ActivePrinter экземпляра приложения Excel, например, и затем отобразите диалоговое окно предварительного просмотра:

using System.Drawing.Printing;
using Excel = Microsoft.Office.Interop.Excel;

Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Add();
Excel.Worksheet worksheet = workbook.Sheets[1];

var printers = PrinterSettings.InstalledPrinters;

Console.WriteLine("Select printer (type the number):");
Console.WriteLine();

for (int i = 0; i < printers.Count; i++)
{
    Console.WriteLine("{0} - {1}", i, printers[i]);
}

int selection = Convert.ToInt32(Console.ReadLine());

application.ActivePrinter = printers[selection];
worksheet.PrintPreview();
Другие вопросы по тегам