我正在使用COM自动化打开xls文件并将其打印到虚拟PDF打印机。
Sheets sheets(m_Application.GetSheets());
sheets.PrintOut(CovOptional,CovOptional,CovOptional,CovOptional,COleVariant(_T("My PDF Printer")),CovOptional,CovOptional);
如果文件有多个工作表,excel会为每个工作表创建一个单独的打印作业,所以我得到几个PDF文件而不是一个。
如何强制它在一个打印作业中打印所有纸张?
答案 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);