当前位置: 首页 > 知识库问答 >
问题:

Python-将XLSX转换为PDF

薄欣怿
2023-03-14

我一直在我的开发服务器中使用win32com模块来轻松地从xlsx转换为pdf

o = win32com.client.Dispatch("Excel.Application")
o.Visible = False
o.DisplayAlerts = False
wb = o.Workbooks.Open("test.xlsx")))
wb.WorkSheets("sheet1").Select()
wb.ActiveSheet.ExportAsFixedFormat(0, "test.pdf")
o.Quit()

但是,我在生产服务器中部署了我的Django应用程序,但我没有安装Excel应用程序,因此引发了以下错误:

File "C:\virtualenvs\structuraldb\lib\site-packages\win32com\client\__init__.p
y", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,c
lsctx)
  File "C:\virtualenvs\structuraldb\lib\site-packages\win32com\client\dynamic.py
", line 114, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\virtualenvs\structuraldb\lib\site-packages\win32com\client\dynamic.py
", line 91, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.II
D_IDispatch)
com_error: (-2147221005, 'Invalid class string', None, None)

在Python中,从xlsx转换为PDF有什么好的替代方法吗?

我已经用PDFWriter测试了xtopdf,但是使用这个解决方案,您需要逐个读取和迭代范围并写入行。我想知道是否有一个更直接的解决方案类似于win32com。客户

谢谢

共有3个答案

马华茂
2023-03-14
from openpyxl import load_workbook
from PDFWriter import PDFWriter

workbook = load_workbook('fruits2.xlsx', guess_types=True, data_only=True)
worksheet = workbook.active

pw = PDFWriter('fruits2.pdf')
pw.setFont('Courier', 12)
pw.setHeader('XLSXtoPDF.py - convert XLSX data to PDF')
pw.setFooter('Generated using openpyxl and xtopdf')

ws_range = worksheet.iter_rows('A1:H13')
for row in ws_range:
    s = ''
    for cell in row:
        if cell.value is None:
            s += ' ' * 11
        else:
            s += str(cell.value).rjust(10) + ' '
    pw.writeLine(s)
pw.savePage()
pw.close()

我一直在用这个它很好用

公冶伟
2023-03-14

编辑:感谢您的否决投票,但这是一个比尝试加载冗余脚本更有效的方法,冗余脚本很难找到,并且在Python 2.7中是错误的。

  1. 将excel扩展表加载到DataFrame中
  2. 将DataFrame写入超文本标记语言文件
  3. 将html文件转换为图像。

    dirname, fname = os.path.split(source)
    basename = os.path.basename(fname)

    data = pd.read_excel(source).head(6)

    css = """

    """

    text_file = open(f"{basename}.html", "w")
    # write the CSS
    text_file.write(css)
    # write the HTML-ized Pandas DataFrame
    text_file.write(data.to_html())
    text_file.close()

    imgkitoptions = {"format": "jpg"}

    imgkit.from_file(f"{basename}.html", f'{basename}.png', options=imgkitoptions)

    try:
        os.remove(f'{basename}.html')
    except Exception as e:
        print(e)

    return send_from_directory('./', f'{basename}.png')

从这里拍的https://medium.com/@andy.lane/convert-pandas-dataframes-to-images-using-imgkit-5da7e5108d55

工作非常好,我有XLSX文件在运行中转换,并在我的应用程序上显示为图像缩略图。

郭博涉
2023-03-14

由于我最初的回答被删除了,最终有点用,我把它转发到这里。

您可以在3个步骤中完成:

  1. 胜过熊猫:熊猫。阅读excel
  2. 熊猫到HTML:熊猫。数据帧。到_html
  3. HTML到pdf:PythonPDFKIT(git),PythonPDFKIT(pypi.org)
import pandas as pd
import pdfkit

df = pd.read_excel("file.xlsx")
df.to_html("file.html")
pdfkit.from_file("file.html", "file.pdf")

安装:

sudo pip3.6 install pandas xlrd pdfkit
sudo apt-get install wkhtmltopdf 
 类似资料:
  • 我正在编写一个程序来处理一些excel文档,该程序是在Visual Studio 2010中用C语言编写的,我正在使用NPOI库。 我注意到我不能对xlsm文件使用CloneSheet(),但我可以使用xlsx。 是我在这个过程中真正需要的一个函数,所以我真的希望它能正常工作,而不是一个单元格一个单元格地复制所有内容。 我想过将文件转换为xlsx。我能够手动完成,但不能以编程方式完成。 这是我试图

  • 问题内容: 我正在寻找python库或任何将.XLSX文件转换为.CSV文件的帮助。 问题答案: 使用该模块阅读excel ,然后可以使用该模块创建自己的csv。 在命令行中安装xlrd模块: Python脚本:

  • 我试图将Python程序转换为C++,因为我对Python的理解稍微好一点。然而,翻译出来的代码并不起作用。有人能帮我一下吗?我试图用C++制作一个数独板,但它在中返回一些值,而不是其他位置。加上它们是无效的,并包含0。 这个程序的输出是一个二维数组,所有值都不在0,并且对数独板有效: 是一个长度为9的二维数组,在每个位置都有9个列出的语句。在这里,它们都被初始化为。 这个程序的输出也是一个二维数

  • 我可以使用以下代码从Xlsx创建一个平面OPC XML文件: 为什么FlatOpcXmlCreator会写入FlatopcXmllimporter无法读取的命名空间? 如果docx4j不可能,那么是否有其他方法可以从平面OPC XML创建Excel?

  • 问题内容: 我看到一些页面允许用户上传并返回文件,例如PdfToWord 是否可以使用Python或任何Unix命令将文件转换为文件? 提前致谢 问题答案: 如果您安装了LibreOffice 如果要为此使用Python: