【问题标题】:How do I batch convert .xlsx to PDF from folder using Python?如何使用 Python 将文件夹中的 .xlsx 批量转换为 PDF?
【发布时间】:2020-03-05 15:42:36
【问题描述】:

我每季度都有一个非常平凡的任务,我需要将 40 个文件从 XLSX 转换为 PDF。我有一些代码可以将一个文件打印为 pdf 但不能打印多页,并且它不能打印多个文件。我想访问该文件夹,打开 .xlsx 并将它们打印为 pdf。

为了更进一步,我的代码没有,我只想打印两张名为:“Page 1”和“Page 2”的工作表

我已经尝试了一个文件,并且可以使用稍微修改的代码。

import os
from win32com import client
xlApp = client.Dispatch("Excel.Application")

source = r"C:\Users\user1\.spyder-py3\QAR"
output = r"C:\Users\user1\.spyder-py3\QAR"

dir_list = os.listdir(source)
os.chdir(source)

for i in range(len(dir_list)):
    filename = dir_list[i]
    print(filename)
    books = xlApp.Workbooks.Open(filename)

    
    for file in range(len(filename)):
          ws = books.Worksheets[1]
          ws.Visible = 1
          ws.ExportAsFixedFormat(0, filename + '\.pdf')

理想情况下,我希望将文件保存为单独的 pdf,包含两张纸,第 1 页和第 2 页。

我可以打开 Excel 文件或将一个 Excel 保存为一页的 pdf,但似乎无法将它们放在一起。

【问题讨论】:

    标签: python excel pdf


    【解决方案1】:

    我可以编写有关如何实现此目的的伪代码。一旦我在笔记本电脑前,我将提供代码块。

    第 1 部分 - 遍历一个或多个文件夹并选择每个文件。将文件传递到逻辑的第 2 部分。 在这一部分中,将处理过的文件移动到第 1 部分(第一次)将创建的 Processed 文件夹中。

    This code will loop thru open the workbooks in silent mode.
    
    Dim oXL As Application
    Set oXL = New Application
    oXL.Visible = False
    
    Dim oXLWB As Workbook
    
    For i = 1 To 1
        Set oXLWB = oXL.Workbooks.Open("C:\abc.xlsx")
        Debug.Print oXLWB.Worksheets(1).Name
        oXLWB.Close
    Next
    
    oXL.Quit
    

    第 2 部分 - 通过 VBA 以静默模式打开每个文件。根据工作表名称打印选择性工作表。使用 PDF 格式打印此选择性工作表列表(我相信您知道)。 在这部分中,如果出现任何错误,请将错误添加到文件名中。显然不要将此文件移动到已处理文件夹并继续。

    让我知道这是否有意义以及您是否取得了任何进展。 祝你好运

    【讨论】:

    • 这将非常有帮助,从我现在可以收集到的信息来看,我的第一个循环是获取文件夹中每个文件的名称,但 Excel 无法使用 Open.Workbook 函数打开它们。我现在正在努力,但真的很感激。
    • 更新,我现在可以打开每个 pdf,虽然不是静默打开,但不知道该怎么做。我会为此使用 xl.visible = false 吗?
    • 普拉纳夫,抱歉耽搁了!哇工作一直很忙。我仍然在结合 python 和 vba 时遇到问题。这段代码看起来像严格的 VBA。还在继续玩它
    • 仍在寻找解决办法,我无法保存文件。我的代码在下面,它说它们是一些错误。 for i in range(len(dir_list)): filename = dir_list[i] print(filename) file = xl.Workbooks.Open((source + "/"+ filename)) ws = file.Worksheets[0] ws.Visible = False ws.SaveAs(output + "/" + filename, FileFormat = 56) #ws.ExportAsFixedFormat(1, output + "/" + filename + '.pdf',0,1) ws.close()
    • 抱歉耽搁了。按照我提到的方式尝试直接文件夹路径。看看这是否有效。然后慢慢修复串联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2020-05-06
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多