programing

Interop을 사용하여 Excel 인쇄

goodsources 2023. 8. 24. 21:59
반응형

Interop을 사용하여 Excel 인쇄

C#과 Excel Interop을 사용하여 Excel 파일을 프로그래밍 방식으로 인쇄하는 방법을 아는 사람이 있습니까?그렇다면 코드를 제공해 주시겠습니까?

인쇄하려면 워크시트를 사용할 수 있습니다.PrintOut() 메서드입니다.유형을 전달하여 선택적 인수의 일부 또는 전부를 생략할 수 있습니다.행방불명.이 모든 항목을 생략하면 활성 프린터에서 기본적으로 하나의 복사본이 인쇄됩니다.그러나 인수를 사용하여 인쇄할 복사본 수, 조합 등을 설정할 수 있습니다.워크시트의 도움말을 참조하십시오.자세한 내용은 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);
}

그러나 기본 설정을 변경할 필요가 없는 한 유형을 전달하면 됩니다.모든 인수가 누락되었습니다.다음은 자동화를 사용하여 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

언급URL : https://stackoverflow.com/questions/854693/printing-excel-using-interop

반응형