Печать выбранных листов в файлах excel в pdf на python

мне нужно написать скрипт python для чтения файлов excel, найти каждый лист, а затем распечатать их в pdf со стандартным форматированием, определенным в excel.

Я нашел следующий вопрос как открыть файл Excel в 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 но пока не могу понять, как его использовать.

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