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

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

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

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

最佳答案

我发现了一个很好的解释,为什么Excel具有这种行为in this article。从文章



我将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);

10-08 04:35