C# 使用 Interop 打印 Excel
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/854693/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Printing Excel using Interop
提问by yeahumok
Does anybody have any idea how to print an excel file programatically using C# and the Excel Interop? If so, can you please provide code?
有人知道如何使用 C# 和 Excel Interop 以编程方式打印 excel 文件吗?如果是这样,你能提供代码吗?
采纳答案by Mike Rosenblum
In order to print, you can make use of the Worksheet.PrintOut()method. You can omit any or all of the optional arguments by passing in Type.Missing. If you omit all of them, it will default to printing out one copy from your active printer. But you can make use of the arguments to set the number of copies to print, collation, etc. See help on the Worksheet.PrintOut()method for more.
为了打印,您可以使用Worksheet.PrintOut()方法。您可以通过传入Type.Missing来省略任何或所有可选参数。如果您省略所有这些,它将默认从您的活动打印机打印一份副本。但是您可以使用参数来设置要打印的份数、整理等。有关更多信息,请参阅Worksheet.PrintOut()方法的帮助。
The example they show in the help file is:
他们在帮助文件中显示的示例是:
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);
}
But unless you need to change the default settings, you can simply pass in Type.Missingfor all the arguments. Here's an example using automation to open an Excel Workbook, print the first page, and then shut down:
但是除非您需要更改默认设置,否则您可以简单地为所有参数传入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);
}
Hope this helps!
希望这可以帮助!
Mike
麦克风
回答by daniele3004
Important improvement is the code for select the Printer, for example:
重要的改进是选择打印机的代码,例如:
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);