【问题标题】:Make excel print multiple worksheets in a single print job使excel在单个打印作业中打印多个工作表
【发布时间】:2012-10-02 06:35:35
【问题描述】:

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

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

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

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

【问题讨论】:

  • Excel 2007 及更高版本可以直接创建 PDF 输出,因此请尝试在此过程中录制宏并将其用作起点。如果您在另存为 PDF 之前选择了多张工作表,则会将它们全部放在一个文件中。
  • 很遗憾,该应用程序不适用于内部使用。它需要至少支持Office 2003,很多人还在使用它。
  • 'Sheets' 类是否真的让您能够在一个作业中打印多张纸?如果不是,您需要将该类继承到自定义类并添加自定义方法。如果是,那么您是否使用了正确的方法?如果是这样,您在该方法中的论点是否正确?
  • @satuon - 根据您的编辑,您可以打印两次(首先到 MS 图像打印机),然后删除第一个文档。
  • 如果我走那条路,我最好在创建 PDF 文件后合并它们。如果我找不到强制 Excel 在单个作业中打印的方法,我正在考虑这样做。

标签: c++ excel com printing office-automation


【解决方案1】:

我找到了一个很好的解释为什么 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);

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多