2013-05-22 23 views
5

Tôi cần viết một tập lệnh python để đọc các tệp excel, tìm từng trang tính và sau đó in chúng vào pdf với định dạng chuẩn được xác định trong excel.In các bảng tính được chọn trong các tệp excel thành pdf trong python

tôi tìm thấy những câu dưới đây How can I open an Excel file in Python? mà chỉ cho tôi để http://www.python-excel.org/

này mang lại cho tôi khả năng để tìm ra tên của mỗi bảng.

import xlrd 
book = xlrd.open_workbook("myfile.xls") 
print "Worksheet name(s):", book.sheet_names() 

này kết quả trong

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'] 

Bây giờ tôi muốn in mỗi bảng mà bắt đầu với một số thành một pdf.

Vì vậy, tôi có thể

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? 

hoặc một cái gì đó tương tự như trên ... những gì tôi có thể sử dụng để đạt được điều này?

Các tài liệu XLRD là khó hiểu nó nói

Formatting tính năng không có trong phiên bản 0.6.1 xlrd: Miscellaneous tờ cấp và các mặt hàng sách cấp ví dụ bố trí in ấn, khung màn hình

Định dạng

Giới thiệu

Bộ sưu tập này các tính năng, mới trong phiên bản 0.6.1 xlrd, được thiết kế để cung cấp thông tin cần thiết để (1) hiển thị/hiển thị bảng tính nội dung (nói) trên màn hình hoặc trong tệp PDF

xem https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html?p=4966

Điều gì là đúng? một số gói khác có thể được sử dụng để in ra pdf không?

Đối với unix tôi thấy rằng có http://dag.wieers.com/home-made/unoconv/ mọi thứ cho cửa sổ? Tôi đã tìm thấy https://gist.github.com/mprihoda/2891437 nhưng không thể tìm ra cách sử dụng nó.

+1

Hey @GeorgeC, bạn đã tìm thấy giải pháp cho điều này chưa? Tôi đang tìm một cách để "in" toàn bộ xsl thành pdf, vì vậy nếu bạn gửi giải pháp của mình dưới dạng anwer sẽ hữu ích :) –

+0

@GustavoVargas Tôi đã không sử dụng như sau vì nó không giữ lại hình thức nhưng xtopdf dường như là một giải pháp ok - dancingbison.com/products.html và nhà phát triển cũng rất hữu ích. – GeorgeC

Trả lời

3

Điều này có vẻ như là nơi để đặt câu trả lời này.

Trong hình thức đơn giản nhất:

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) 

Bao gồm một chút ma thuật định dạng mà mở rộng để phù hợp với một trang duy nhất và thiết đặt vùng in:

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) 

Tôi cũng đã bắt đầu một mô-đun trên một github nếu bạn muốn xem xét điều đó: https://github.com/spottedzebra/excel/blob/master/excel_to_pdf.py

+0

Chỉ cần thêm tất cả các tùy chọn PageSetup khác: https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.pagesetup_properties.aspx –

+0

Nếu tab có nhiều vùng in, cách xác định ? – Gavin

+0

Tôi không chắc chắn nhưng tôi có một gợi ý về cách tiến hành. Tôi nghĩ bạn có thể thêm nhiều biến "print_area". Vì vậy, bạn có thể thực hiện các thao tác sau: print_area = A1: G50 print_area2 = A52: G52 Bạn cũng có thể lặp lại chỉ mục trang hai lần hoặc thực hiện bit thiết lập trang hai lần trong vòng lặp. Đây chỉ là ý tưởng. Tôi đã không thực sự cố gắng in nhiều khu vực in ấn. – spottedzebra

0

Bạn cũng có thể sử dụng https://www.coolutils.com/TotalExcelConverterXPython

Ví dụ

import win32com.client 
import os.path 

c = win32com.client.Dispatch("ExcelConverter.ExcelConverterX") 

src="C:\\test\\test.xlsx"; 
dest="C:\\test\\test.pdf"; 

c.convert(src, dest, "-c PDF -log c:\\test\\Excel.log"); 

if not os.path.exists(file_path): 
    print(c.ErrorMessage) 
Các vấn đề liên quan