Печать Excel с использованием Interop - PullRequest
15 голосов
/ 13 мая 2009

Кто-нибудь знает, как программно распечатать файл Excel с использованием C # и Excel Interop? Если да, можете ли вы предоставить код?

Ответы [ 2 ]

25 голосов
/ 13 мая 2009

Для печати вы можете использовать метод Worksheet.PrintOut () . Вы можете опустить любой или все необязательные аргументы, передав Type.Missing . Если вы пропустите все из них, по умолчанию будет распечатана одна копия с вашего активного принтера. Но вы можете использовать аргументы, чтобы установить количество копий для печати, сопоставления и т. Д. См. Справку по методу Worksheet.PrintOut () для получения дополнительной информации.

Пример, который они показывают в файле справки:

private void PrintToFile()
{
    // Make sure the worksheet has some data before printing.
    this.Range["A1", missing].Value2 = "123";
    this.PrintOut(1, 2, 1, false, missing, true, false, missing);
}

Но если вам не нужно изменять настройки по умолчанию, вы можете просто передать Type.Missing для всех аргументов. Вот пример использования автоматизации, чтобы открыть книгу Excel, распечатать первую страницу, а затем завершить работу:

void PrintMyExcelFile()
{
    Excel.Application excelApp = new Excel.Application();

    // Open the Workbook:
    Excel.Workbook wb = excelApp.Workbooks.Open(
        @"C:\My Documents\Book1.xls",
        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);

    // Get the first worksheet.
    // (Excel uses base 1 indexing, not base 0.)
    Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];

    // Print out 1 copy to the default printer:
    ws.PrintOut(
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing);

    // Cleanup:
    GC.Collect();
    GC.WaitForPendingFinalizers();

    Marshal.FinalReleaseComObject(ws);

    wb.Close(false, Type.Missing, Type.Missing);
    Marshal.FinalReleaseComObject(wb);

    excelApp.Quit();
    Marshal.FinalReleaseComObject(excelApp);
}

Надеюсь, это поможет!

Mike

2 голосов
/ 24 марта 2016

Важным улучшением является код для выбора принтера, например:

var printers = System.Drawing.Printing.PrinterSettings.InstalledPrinters;

int printerIndex = 0;

foreach(String s in printers)
{
    if (s.Equals("Name of Printer"))
    {
        break;
    }
    printerIndex++;
}

xlWorkBook.PrintOut(Type.Missing, Type.Missing, Type.Missing, Type.Missing,printers[printerIndex], Type.Missing, Type.Missing, Type.Missing);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...