注册 登录
编程论坛 VFP论坛

如何选择某工作簿的多个工作表,按选定工作表打印成指定PDF

shschy 发布于 2024-05-27 22:12, 275 次点击
具体需求:(1)需要将某工作簿内若干工作表合并打印(另存为)一个PDF,不是整个工作簿。
          (2)打印成PDF,可以代码里预设定“待转出的PDF文件名吗?”
          (3)EXCEL或WPS表格中的另存为PDF只能整个工作簿转,不满足若干指定工作表另存为。
整个工作簿或某个工作表的代码知道,但若干个选定工作表合并打印不知道。

整个工作簿打印
   EXCEL.Workbooks.Open("&工作簿名")
   EXCEL.Visible=.T.
   Excel.activeworkbook.PrintOut &&整个工作簿打印

单个工作表打印
   EXCEL.Workbooks.Open("&工作簿名")          &&[方法一]
   EXCEL.Worksheets("工作表名").Activate      &&[方法一]
   EXCEL.ActiveSheet.PrintOut                 &&[方法一]

整个工作簿另存为PDF
   cPDFPath = "d:\output.pdf"
   EXCEL.Workbooks.Open("&工作簿名")   
   Excel.activeworkbook.ExportAsFixedFormat(0,"&cPDFPath")
6 回复
#2
fyyylyl2024-05-29 17:40
将工作簿中多个工作表合着合并到第一个工作表,并删除后面的工作表,生成一个仅有一个表的工作簿,之后再按工作簿另存为PDF执行:
cXlsFile=GETFILE("XLS")
IF !EMPTY(cXlsFile)
    eole=CREATEOBJECT("Excel.application")
    eole.Workbooks.Open(cXlsFile)   
    nSheet=eole.Sheets.Count
    nRow=eole.Sheets(1).UsedRange.Rows.Count        &&已有行数
    IF nSheet>1
        FOR I=2 TO nSheet
            eole.Worksheets(i).Activate
            eole.ActiveSheet.UsedRange.Copy    &&拷贝整个工作表
            eole.Worksheets("sheet1").Activate    &&激活第一个工作表
                nRowCounts=eole.SHEETS(1).UsedRange.Rows.Count        &&已有行数
            eole.ActiveSheet.Range("A"+ALLTRIM(STR(nRowCounts+1))).PasteSpecial        &&粘贴
        ENDFOR

        eole.DisplayAlerts = .F.        &&屏蔽警告信息
        DO WHILE .t.
            eole.Worksheets(2).Activate
            eole.ActiveWindow.SelectedSheets.Delete()    &&删除第一个之外所有工作表
            IF eole.Sheets.Count=1
                EXIT
            ENDIF
        ENDDO
    ENDIF

     ......

    eole.ActiveWorkbook.saved=.t.    &&放弃存盘
    eole.Workbooks.Close
    eole.Quit
ENDIF
#3
sdta2024-05-29 17:58
EXCEL2016中有现成的生成PDF文件的命令
#4
shschy2024-05-30 11:41
回复 2楼 fyyylyl
谢谢指点。两个sheet里都是有标题行的设置,无法简单合并,现在采取每个sheet另存为pdf,再安排pdf合并。
#5
shschy2024-05-30 11:43
回复 3楼 sdta
谢谢指点,对于VFP而言,是利用saveas(pdf文件名,17)调用吗?

#6
sdta2024-05-30 12:36
论坛上看到过炊版的回复,你找找看
#7
sdta2024-05-30 13:08
1