1

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

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

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

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

4

1 回答 1

2

我在这篇文章中找到了一个很好的解释为什么 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);
于 2012-10-12T13:52:24.203 回答