2012-10-11 70 views
1

我使用COM自動化來打開xls文件並將其打印到虛擬PDF打印機。使excel打印單個打印作業中的多個工作表

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

如果文件中有多個工作表,但是,Excel會爲每片單獨的打印作業,所以我得到幾個PDF文件,而不是一個。

如何強制它在單個打印作業中打印所有工作表?

+0

Excel 2007和上可以直接創建PDF輸出,所以嘗試錄製一個宏,並以此爲出發點。如果您在保存爲PDF之前選擇了多張紙,則會將它們全部放入一個文件中。 –

+0

不幸的是,該應用程序不適用於內部使用。它至少需要支持Office 2003,許多人仍在使用它。 – sashoalm

+0

「表格」課程是否能讓您在一份工作中打印多張表格?如果不是,則需要將該類繼承到自定義類中並添加一個自定義方法。如果是,那麼你使用正確的方法?如果是這樣,你在該方法中的論點是否正確? – 2012-10-11 16:20:41

回答

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); 
相關問題