2012-06-05 21 views
5

necesito para imprimir un área seleccionada de una hoja de Excel (que he seleccionado con Range.Select()) usando los siguientes ajustes de impresión:Excel interoperabilidad Imprimir

Impresora: Microsoft XPS Documento escritor
impresión Selección
la orientación horizontal
A4
márgenes normales de
Hoja caber en una página

¿Cómo se puede lograr esto usando _Worksheet.PrintOut o _Worksheet.PrintOutEx?

¡Gracias de antemano!

Respuesta

13

Prueba esto (probado y comprobado)

Estoy asumiendo que ha establecido referencia a Excel y ya han declarado sus objetos como

Microsoft.Office.Interop.Excel.Application xlexcel; 
Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 
Microsoft.Office.Interop.Excel.Range xlRange; 
object misValue = System.Reflection.Missing.Value; 

Esto va en la parte posterior del código de .

// Get the current printer 
string Defprinter = null; 
Defprinter = xlexcel.ActivePrinter; 

// Set the printer to Microsoft XPS Document Writer 
xlexcel.ActivePrinter = "Microsoft XPS Document Writer on Ne01:"; 

// Setup our sheet 
var _with1 = xlWorkSheet.PageSetup; 
// A4 papersize 
_with1.PaperSize = Excel.XlPaperSize.xlPaperA4; 
// Landscape orientation 
_with1.Orientation = Excel.XlPageOrientation.xlLandscape; 
// Fit Sheet on One Page 
_with1.FitToPagesWide = 1; 
_with1.FitToPagesTall = 1; 
// Normal Margins 
_with1.LeftMargin = xlexcel.InchesToPoints(0.7); 
_with1.RightMargin = xlexcel.InchesToPoints(0.7); 
_with1.TopMargin = xlexcel.InchesToPoints(0.75); 
_with1.BottomMargin = xlexcel.InchesToPoints(0.75); 
_with1.HeaderMargin = xlexcel.InchesToPoints(0.3); 
_with1.FooterMargin = xlexcel.InchesToPoints(0.3); 

// Print the range 
xlRange.PrintOutEx(misValue, misValue, misValue, misValue, 
misValue, misValue, misValue, misValue); 

// Set printer back to what it was 
xlexcel.ActivePrinter = Defprinter; 
+0

Muchas gracias! Pero, ¿cómo supiste "en Ne01"? – MemphiZ

+2

Puede encontrarlo usando 'Defprinter = xlexcel.ActivePrinter;' y luego imprimirlo en la ventana inmediata. Ese código le dirá cuál es su impresora activa. Para probarlo, cambie la impresora a XPS y luego ejecute el código anterior. –

+1

Encontré esta forma de detectar qué puerto Ne usar: http://stackoverflow.com/questions/5424932/how-to-determine-what-ne-port-the-adobe-pdf-printer-is-on. Además de pageSetup.Zoom tiene que establecerse en falso para que FitToPagesWide/Tall funcione y use range.ExportAsFixedFormat (XlFixedFormatType.xlTypeXPS, outputPath); en lugar de PrintOutEx. Tal vez pueda actualizar su código anterior :) – MemphiZ

0

Para que funcione la 'Hoja de ajuste en una página' también debemos establecer la propiedad de Zoom en falso.

// Hoja caber en una página

_with1.FitToPagesWide = 1; 

_with1.FitToPagesTall = 1; 

_with1.Zoom = False; 
Cuestiones relacionadas