将excel文件中选择的工作表打印为python中的pdf
Posted
技术标签:
【中文标题】将excel文件中选择的工作表打印为python中的pdf【英文标题】:Print chosen worksheets in excel files to pdf in python 【发布时间】:2013-05-17 00:13:45 【问题描述】:我需要编写一个 python 脚本来读取 excel 文件,找到每个工作表,然后使用 excel 中定义的标准格式将它们打印为 pdf。
我发现了以下问题How can I open an Excel file in Python? 将我指向http://www.python-excel.org/
这使我能够找到每个工作表的名称。
import xlrd
book = xlrd.open_workbook("myfile.xls")
print "Worksheet name(s):", book.sheet_names()
这会导致
Worksheet name(s): [u'Form 5', u'Form 3', u'988172 Adams Road', u'379562 Adams Road', u'32380 Adams Road', u'676422 Alderman Road', u'819631 Appleyard Road', u'280998 Appleyard Road', u'781656 Atkinson Road', u'949461 Barretts Lagoon Road', u'735284 Bilyana Road', u'674784 Bilyana Road', u'490894 Blackman Road', u'721026 Blackman Road']
现在我想将每个以数字开头的工作表打印为 pdf。
所以我可以
worksheetList=book.sheet_names()
for worksheet in worksheetList:
if worksheet.find('Form')!=0: #this just leaves out worksheets with the word 'form' in it
<function to print to pdf> book.sheet_by_name(worksheet) #what can I use for this?
或类似于上面的东西......我可以用什么来实现这一点?
XLRD 文档令人困惑
xlrd 0.6.1 版中未包含的格式化功能:其他 工作表级和书籍级项目,例如打印布局、屏幕窗格
和
格式化
简介
xlrd 0.6.1 版中的新功能集合旨在 提供 (1) 显示/呈现电子表格所需的信息 屏幕或 PDF 文件中的内容(例如)
见https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html?p=4966
哪个是真的?可以用其他包打印成pdf吗?
对于 unix,我看到 http://dag.wieers.com/home-made/unoconv/ 有什么适用于 windows 的吗?我找到了https://gist.github.com/mprihoda/2891437,但还不知道怎么用。
【问题讨论】:
嘿@GeorgeC,你找到解决方案了吗?我正在寻找一种将整个 xsl “打印”为 pdf 的方法,因此,如果您将解决方案作为答案提交将很有帮助:) @GustavoVargas 我没有使用以下内容,因为它不保留格式,但 xtopdf 似乎是一个不错的解决方案 - dancebison.com/products.html,开发人员也非常乐于助人。跨度> 【参考方案1】:这似乎是放置这个答案的地方。
最简单的形式:
import win32com.client
o = win32com.client.Dispatch("Excel.Application")
o.Visible = False
wb_path = r'c:\user\desktop\sample.xls'
wb = o.Workbooks.Open(wb_path)
ws_index_list = [1,4,5] #say you want to print these sheets
path_to_pdf = r'C:\user\desktop\sample.pdf'
wb.WorkSheets(ws_index_list).Select()
wb.ActiveSheet.ExportAsFixedFormat(0, path_to_pdf)
包括一点格式化魔法,可以缩放以适应单个页面并设置打印区域:
import win32com.client
o = win32com.client.Dispatch("Excel.Application")
o.Visible = False
wb_path = r'c:\user\desktop\sample.xls'
wb = o.Workbooks.Open(wb_path)
ws_index_list = [1,4,5] #say you want to print these sheets
path_to_pdf = r'C:\user\desktop\sample.pdf'
print_area = 'A1:G50'
for index in ws_index_list:
#off-by-one so the user can start numbering the worksheets at 1
ws = wb.Worksheets[index - 1]
ws.PageSetup.Zoom = False
ws.PageSetup.FitToPagesTall = 1
ws.PageSetup.FitToPagesWide = 1
ws.PageSetup.PrintArea = print_area
wb.WorkSheets(ws_index_list).Select()
wb.ActiveSheet.ExportAsFixedFormat(0, path_to_pdf)
如果你想看的话,我还在 github 上启动了一个模块:https://github.com/spottedzebra/excel/blob/master/excel_to_pdf.py
【讨论】:
只需添加所有其他 PageSetup 选项:msdn.microsoft.com/en-us/library/… 如果标签有多个打印区域,如何定义? 我不确定,但我对如何进行有一个建议。我认为您可以添加多个“print_area”变量。因此您可以执行以下操作: print_area = A1:G50 print_area2 = A52:G52 您可能还必须循环两次工作表索引或在 for 循环中执行两次代码的页面设置位。这些只是想法。我实际上并没有尝试打印多个打印区域。 您好,由于您使用的是库:import win32com.client,看来这是一个仅限 Windows 的解决方案。这可以在没有安装 Microsoft Office 的 Linux 服务器上运行吗? 这似乎是存储在磁盘上的 Excel 文件的解决方案。如果有人解释了如何使用 Excel 实例完成此操作,那将是对答案的一个很好的编辑,以便在转换为 PDF 之前不必将其保存在磁盘上。以上是关于将excel文件中选择的工作表打印为python中的pdf的主要内容,如果未能解决你的问题,请参考以下文章
如何将1个excel文件中的100个工作表拆分成独立的excel文件