Вопрос по interop, c#, excel, printing – Excel Interop Print

5

Мне нужно распечатать выбранную область листа Excel (которую я выбрал с помощью Range.Select ()), используя следующие параметры печати:

Принтер: Microsoft XPS Document Writer
Выбор печати
Альбомная ориентация
A4
Нормальные поля
Подгонка листа на одной странице

Как я могу добиться этого с помощью _Worksheet.PrintOut или _Worksheet.PrintOutEx?

Заранее спасибо!

Ваш Ответ

2   ответа
13

TRIED AND TESTED)

Я предполагаю, что вы установили ссылку на Excel и уже объявили ваши объекты как

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;

Это идет в более поздней части кода.

// 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;
Вы можете найти это используяDefprinter = xlexcel.ActivePrinter; а затем распечатать его в ближайшем окне. Этот код скажет вам, какой у вас активный принтер. Чтобы проверить это, измените принтер на XPS и запустите приведенный выше код.
Как автоматизировать, если пользователь хочет печатать со страницы 3 на страницу 7. Любой способ добавить _with1.StartPage & amp; _with1.EndPage ?? Спасибо
У меня есть файл Excel, и я хочу автоматически изменить лоток принтера при печати этого файла Excel. Как я могу это сделать. Tks
Большое спасибо! Но как ты узнал "на Ne01"? MemphiZ
Я нашел этот способ, чтобы определить, какой порт Ne использовать:stackoverflow.com/questions/5424932/…, Кроме того, для pageSetup.Zoom должно быть установлено значение false, чтобы FitToPagesWide / Tall работали и использовали range.ExportAsFixedFormat (XlFixedFormatType.xlTypeXPS, outputPath); вместо PrintOutEx. Может быть, вы можете обновить свой код выше :) MemphiZ
0

мы также должны установить для свойства Zoom значение false.

// Разместить лист на одной странице

_with1.FitToPagesWide = 1;

_with1.FitToPagesTall = 1;

_with1.Zoom = False;

Похожие вопросы