2009-05-12 25 views
13

¿Alguien tiene alguna idea de cómo imprimir un archivo Excel programáticamente usando C# y Excel Interop? Si es así, ¿puedes proporcionar el código?Imprimir Excel usando Interop

Respuesta

20

Para imprimir, puede utilizar el método Worksheet.PrintOut(). Puede omitir uno o todos los argumentos opcionales pasando Type.Missing. Si los omite a todos, se imprimirá una copia por defecto de su impresora activa. Pero puede utilizar los argumentos para establecer el número de copias para imprimir, intercalar, etc. Consulte la ayuda en el método Worksheet.PrintOut() para obtener más información.

El ejemplo que se muestran en el archivo de ayuda es:

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); 
} 

Pero a menos que necesite cambiar la configuración predeterminada, sólo tiene que pasar en Type.Missing para todos los argumentos. He aquí un ejemplo utilizando la automatización para abrir un libro de Excel, imprimir la primera página y, a continuación, apague:

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); 
} 

Espero que esto ayude!

Mike

+0

muchas gracias !!! esto fue MUY útil! – yeahumok

+0

Genial, me alegro de poder ayudarte. :-) –

+0

no sabría cómo mostrar un diálogo de impresión en lugar de imprimir directamente el documento ... ¿lo haría? – yeahumok

1

mejora importante es el código para seleccionar la impresora, por ejemplo:

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);