Кто-нибудь знает, как программно распечатать файл Excel с помощью C # и Excel Interop? Если да, не могли бы вы предоставить код?
Печать Excel с помощью Interop
Ответы (3)
Для печати вы можете использовать Worksheet.PrintOut (). Вы можете опустить любой или все необязательные аргументы, передав Тип. Отсутствует. Если вы опустите их все, по умолчанию будет распечатана одна копия с вашего активного принтера. Но вы можете использовать аргументы, чтобы задать количество копий для печати, сортировки и т. Д. См. Справку по 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);
}
Надеюсь это поможет!
Майк
Важным улучшением является код для выбора принтера, например:
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);
Все уже предоставленные ответы хороши, но я просто подумал, что сохраню их намного проще, добавив больше возможностей для отображения диалогового окна и определения ориентации страницы для печати.
private void PrintExcel()
{
string filePath = "C:\file\location\here\";
Excel.Application excelApp = new Excel.Application();
// Open Workbook:
Excel.Workbook wb = excelApp.Workbooks.Open(filePath);
// Define the orientation for the page
((Excel._Worksheet)wb.ActiveSheet).PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;
//Decide which worksheet to print
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];
// Option to print with or to show dialogue box
bool userDidntCancel = excelApp.Dialogs[Excel.XlBuiltInDialog.xlDialogPrint].Show();
// Option to print out wihtout the dialogue box.
// WARNING: Do not use Dialogue option and this at the same time.
// It will print the page even if you cancel the dialogue print option.
ws.PrintOut();
// Cleanup your code
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(ws);
wb.Close(false, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(wb);
// Close/Exit File
excelApp.Quit();
Marshal.FinalReleaseComObject(excelApp);
}
Надеюсь, этот бит кому-то поможет. : D