2012-10-11 3 views
1

COM 자동화를 사용하여 xls 파일을 열고 가상 PDF 프린터로 인쇄합니다. 파일이 여러 워크 시트가있는 경우하나의 인쇄 작업으로 여러 워크 시트를 인쇄 할 수 있습니다.

Sheets sheets(m_Application.GetSheets()); 
sheets.PrintOut(CovOptional,CovOptional,CovOptional,CovOptional,COleVariant(_T("My PDF Printer")),CovOptional,CovOptional); 

그러나, 엑셀은 모든 시트에 대해 별도의 인쇄 작업을 생성, 그래서 하나가 아닌 여러 PDF 파일을 얻을.

단일 인쇄 작업에서 모든 시트를 인쇄하려면 어떻게해야합니까?

+0

Excel 2007 이상에서는 PDF 출력을 직접 만들 수 있으므로 그 동안 매크로를 기록하여 시작점으로 사용하십시오. PDF로 저장하기 전에 여러 장을 선택하면 모든 파일이 단일 파일에 저장됩니다. –

+0

응용 프로그램은 불행히도 사내에서 사용할 수 없습니다. 최소한 Office 2003을 지원해야하며 많은 사람들이 여전히 Office 2003을 사용하고 있습니다. – sashoalm

+0

'시트'클래스는 실제로 한 가지 작업에서 여러 장을 인쇄 할 수있는 기능을 제공합니까? 그렇지 않으면 클래스를 상속 클래스에 추가하고 사용자 정의 메서드를 추가해야합니다. 그렇다면 올바른 방법을 사용하고 있습니까? 그 방법에 대한 귀하의 주장이 맞습니까? –

답변

2

Excel에서이 동작이 발생하는 이유에 대한 설명이 매우 유용합니다. in this article. 문서에서

이 오류는 Microsoft Excel에서 인쇄 작업을 보내는 방식 때문에 발생합니다. Excel에서는 모든 개별 시트가 다른 페이지 페이지를 가지고 있다고 가정하므로 여러 인쇄 작업으로 보냅니다. 당신이 그들 (의 모든 을 같은 페이지 설정 옵션을 설정해야합니다 하나의 PDF 파일 (안 여러 PDF 파일) 내에서 인쇄 된 모든 개별 시트를하기 위해

Excel에서 페이지 설정은 의 인쇄 크기를 수정 예를 들어 페이지 레이아웃을 Excel에서 가로 으로 설정하면 인쇄 된 페이지는 가로로 표시되지만 원본 Excel 파일은 여전히 ​​동일한보기를 유지합니다.

나는 an answer의 코드를 유사한 질문으로 채택했다. 이 코드는 원래 C#에 있지만 C++에 맞게 수정되었습니다.

Sheets sheets(m_Application.GetSheets()); 

for (int ii = 1; ii <= sheets.GetCount(); ii++) 
{ 
    _Worksheet sheet(sheets.GetItem(COleVariant((long) ii))); 
    PageSetup pagesetup(sheet.GetPageSetup()); 
    pagesetup.SetOrientation(2); // landscape 
    pagesetup.SetOrder(1); // xlDownThenOver 
    pagesetup.SetFitToPagesWide(COleVariant((long) 1)); 
    pagesetup.SetFitToPagesTall(COleVariant((long) 50)); 
    VARIANT variant; 
    variant.vt = VT_BOOL; 
    variant.boolVal = VARIANT_FALSE; 
    pagesetup.SetZoom(variant); 
} 

sheets.PrintOut(CovOptional, CovOptional, CovOptional, CovOptional, COleVariant(_T(MyAppPrinterName)), CovOptional, CovOptional);