我正在使用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);