2013-05-22 55 views
5

Excel dosyalarının okunması için bir python betiği yazmalı, her çalışma sayfasını bulmalı ve bunları pdf formatında excel'de tanımlanmış standart biçimlendirmeyle yazmalı. Seçilen çalışma sayfalarını python'a pdf olarak pdf olarak yazdırın

Ben Bu bana her çalışma isimlerini bulma olanağı verir http://www.python-excel.org/

işaret beni şu soru How can I open an Excel file in Python? bulundu.

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

yılında

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

Bu sonuçlar Şimdi bir pdf bir sayıyla başlayan her çalışma sayfası yazdırmak istiyorum.

yüzden can

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? 

veya yukarıdaki benzer bir şey ... Ben bunu başarmak ne kullanabiliriz? mesela Çeşitli yaprak düzeyinde ve kitap düzeyinde öğeler:

XLRD belgelerine

Biçimlendirme xlrd sürümü 0.6.1 bulunmayan özellikleri diyor kafa karıştırıcı baskı düzeni, ekran bölmeleri

ve

Giriş

xlrd sürümü 0.6.1 yeni özellikler, bu koleksiyon biçimlendirme

, gerekli bilgileri sağlamak amaçlanmaktadır (1) elektronik tabloyu (ekran) içeriğini ya da PDF dosyasını ekrandan gösterir (0)

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

Hangisi doğrudur? pdf'ye yazdırmak için başka bir paket kullanılabilir mi?

Unix için Windows için http://dag.wieers.com/home-made/unoconv/ bir şey olduğunu görüyor musunuz? https://gist.github.com/mprihoda/2891437'u buldum, ancak henüz nasıl kullanılacağını anlayamıyorum.

+1

Hey @GeorgeC, bunun için bir çözüm buldunuz mu? Ben pdf için bir bütün xsl "yazdırmak" için bir yol arıyorum, bu yüzden eğer bir anwer olarak çözümünüzü gönderirseniz yardımcı olacaktır :) –

+0

@GustavoVargas Ben biçimlendirmeyi korumak değil ama xtopdf görünüyordu gibi aşağıdakileri kullanmadım Tamam bir çözüm olmak - dancingbison.com/products.html ve geliştirici de çok yardımcı oldu. – GeorgeC

cevap

3

Bu cevabı koyma yeri gibi görünüyor.

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) 

Ben de bir aşkın bir modül başladı: Tek bir sayfaya sığacak şekilde ölçekler ve baskı alanını belirler biraz biçimlendirme büyü dahil

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) 

: En basit haliyle

buna bakmak isterseniz github: https://github.com/spottedzebra/excel/blob/master/excel_to_pdf.py Ayrıca

+0

Diğer tüm PageSetup seçeneklerini eklemeniz: https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.pagesetup_properties.aspx –

+0

Sekmede birden fazla yazdırma alanı varsa, bunu nasıl tanımlanır ? – Gavin

+0

Emin değilim ama nasıl devam edeceğime dair bir öneri var. Birden çok "print_area" değişkenini ekleyebilirsiniz. Yani şu yapabilirdi: print_area = A1: G50 print_area2 = A52: G52 Ayrıca iki kez sac endeksi döngü varsa veya iki kez kod sayfa yapısı düşeni yapmak olabilir döngü. Bunlar sadece fikirler. Birden fazla baskı alanı basmayı denemedim. – spottedzebra

0

kullanabileceğiniz https://www.coolutils.com/TotalExcelConverterXPython

Örnek

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) 
İlgili konular