Excel がこのような動作をする理由について、この記事で非常に適切な説明を見つけました。記事より
これは、Microsoft Excel が印刷ジョブを送信する方法が原因で発生します。Excel は、すべての個々のシートのページ設定が異なると想定しているため、それらを複数の印刷ジョブとして送信します。
すべての個々のシートを 1 つの 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);