使excel在单个打印作业中打印多个工作表

我正在使用COM自动化打开一个xls文件并将其打印到虚拟PDF打印机。

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

但是,如果文件有多个工作表,excel为每个工作表创build一个单独的打印作业,所以我得到了几个PDF文件而不是一个。

我如何强制它打印一个打印作业中的所有纸张?

我发现了一个非常好的解释,为什么Excel 在这篇文章中有这种行为。 从文章

发生这种情况是由于Microsoft Excel发送打印作业的方式。 Excel会假设您的所有单页都有不同的页面设置,因此将它们作为多个打印作业发送。

为了将所有单张打印在单个PDF文件(不是多个PDF)中,您需要为所有页面设置相同的页面设置选项(Excel中的页面设置会修改生成文件的打印尺寸,例如,如果您将页面布局设置为横向在Excel中,打印的页面将横向,但您的原始Excel文件仍将保持相同的视图)。

我修改了一个类似问题的答案代码。 代码最初是用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);