web-dev-qa-db-ja.com

相互運用機能を使用したExcelの印刷

C#とExcel相互運用機能を使用してプログラムでExcelファイルを印刷する方法を知っている人はいますか?もしそうなら、コードを提供していただけますか?

15
yeahumok

印刷するには、 Worksheet.PrintOut() メソッドを使用できます。 Type.Missing を渡すことにより、オプションの引数の一部またはすべてを省略できます。それらをすべて省略すると、デフォルトでアクティブなプリンタから1部が印刷されます。ただし、引数を使用して、印刷する部数や照合順序などを設定できます。詳細については、 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);
}

お役に立てれば!

マイク

26
Mike Rosenblum

重要な改善点は、プリンタを選択するためのコードです。次に例を示します。

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