13

我需要编写一个 python 脚本来读取 excel 文件,找到每个工作表,然后使用 excel 中定义的标准格式将它们打印为 pdf。

我发现以下问题如何在 Python 中打开 Excel 文件?这指出我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但还不知道如何使用它。

4

1 回答 1

29

这似乎是放置这个答案的地方。

以最简单的形式:

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

于 2015-08-04T15:19:16.977 回答