Son zamanlarda bazı veri işleme ve hesaplama çalışmaları yapıyorum, veriler .CSV formatında kaydedildiği için doğrudan Excel ile işlemeye başladım.
Ancak bunu yapmak ve tekrar eden çalışmayı keşfetmek aslında pek mantıklı değil, bu yüzden bununla başa çıkmanıza yardımcı olacak küçük bir araç yazmayı düşündüm.
Daha önce Excel elektronik tablolarını işlemek için Python kullanarak bir kitapta okudum, ancak ne yazık ki dikkatlice okumadım.
Bu yüzden her yerde bilgi aradım, temel olarak günlük ihtiyaçları çözdüm ve sonunda görevi tamamladım, bu nedenle bu makaleyi yazmak, esas olarak kullanım sürecindeki ortak sorunları ve çözümleri kaydetmek için bir özet.
Python, Excel'i esas olarak xlrd ve xlwt olmak üzere iki kitaplık kullanarak çalıştırır, yani xlrd, Excel'i okumak için bir kitaplıktır ve xlwt, Excel yazmak için bir kitaplıktır.
Https://pypi.python.org/pypi adresinden indirilebilir. Aşağıdaki, Python'u sırasıyla okurken ve yazarken kaydeder.
Python'da Excel yazmanın zorluğu bir Çalışma Kitabının kendisini oluşturmak değil, verileri doldurmaktır, ancak bu kapsamda değildir.
Excel yazım işleminde de çetrefilli problemler var mesela birleştirilmiş hücrelere yazmak daha zahmetli, ayrıca farklı yazı stilleri de var.
Ayrıntılı kod aşağıdaki gibidir:
xlwt içe aktar # Tablo stilini ayarla def set_style (ad, yükseklik, kalın = Yanlış): style = xlwt.XFStyle () font = xlwt.Font () font.name = isim font.bold = kalın font.color_index = 4 font.height = yükseklik style.font = yazı tipi dönüş stili # Excel yaz def write_excel (): f = xlwt.Workbook () sheet1 = f.add_sheet ('öğrenci', cell_overwrite_ok = Doğru) row0 = colum0 = # İlk satırı yazın aralıktaki i için (0, len (satır0)): sayfa1.write (0, i, satır0 , set_style ('Times New Roman', 220, Doğru)) # İlk sütunu yazın aralıktaki i için (0, len (colum0)): sheet1.write (i + 1,0, sütun0 , set_style ('Times New Roman', 220, Doğru)) sheet1.write (1,3, '2006/12/12') page1.write_merge (6,6,1,3, 'bilinmeyen') # Satır hücrelerini birleştir page1.write_merge (1,2,3,3, ' ') # Sütun hücrelerini birleştir sheet1.write_merge (4,5,3,3, 'basketbol oyna') f.save ('test.xls') __name__ == '__ main__' ise: write_excel ()Sonuç grafiği:
Burada write_merge () kullanımının kısa bir açıklaması, yukarıdaki gibi: sheet1.write_merge (1,2,3,3, 'oyun oynama'), yani dört sütundaki ikinci ve üçüncü sütunları ve birleştirilmiş hücreleri birleştirin İçerik "toplam" dır ve stil ayarlanmıştır. Bunların arasında, içindeki tüm parametreler 0'dan hesaplanır.
Python Excel tablolarını okur xlwt ile karşılaştırıldığında, xlrd daha fazla arayüz sağlar, ancak aynı zamanda süreçte tarihleri okumak ve birleştirilmiş hücrelerin içeriğini okumak gibi birkaç zahmetli problem vardır.
Temel işlemlere bir göz atalım:
(Grafik verileri)
Genel fikir, dosyayı açmak, tabloyu seçmek, satır ve sütun içeriğini okumak ve tablodaki verileri okumaktır.
Ayrıntılı kod aşağıdaki gibidir:
xlrd içe aktar datetime içe aktarma tarihinden itibaren, datetime file = 'test3.xlsx' def read_excel (): wb = xlrd.open_workbook (dosyaadı = dosya) # Açık dosya print (wb.sheet_names ()) # Tüm tablo adlarını al sheet1 = wb.sheet_by_index (0) # Dizine göre tablo al sheet2 = wb.sheet_by_name ('derece') # Formu ada göre alın baskı (sayfa1, sayfa2) baskı (sayfa1.adı, sayfa1.nrows, sayfa1.ncols) rows = sheet1.row_values (2) # Satır içeriğini al cols = sheet1.col_values (3) #Sütun içeriğini alın baskı (satırlar) baskı (cols) print (sheet1.cell (1,0) .value) # Tablodaki içeriği üç yolla alın baskı (sayfa1.cell_value (1,0)) print (sheet1.row (1) .value)Sonuçlar aşağıdaki gibidir:
Öyleyse sorun şu ki, yukarıdaki çalışan sonuçtaki kırmızı kutudaki alan, açık bir şekilde doğum tarihidir ve gerçek kayan nokta numarasını görüntüleyebilir; aynı zamanda, birleştirilmiş hücrede içerik olmalıdır ve sonuç boş olamaz.
Merak etmeyin, bu iki sorunu tek tek çözelim:
1. Python, Excel'deki hücre içeriğini tarih olarak nasıl okur?
Python, Excel'deki hücrelerin içeriğini okur ve 5 tür, yani yukarıdaki örnekte ctype döndürür:
ctype: 0 boş, 1 dize, 2 sayı, 3 tarih, 4 boole, 5 hata
Yani, tarihin ctype = 3. Şu anda, bunu bir tarih formatı olarak işlemek için xlrd's xldate_as_tuple'ı kullanmanız gerekir.Eğer tablonun ctype = 3'ü ilk olarak değerlendirirseniz, xldate işlemi başlatabilir.
Ayrıntılı kod aşağıdaki gibidir:
xlrd içe aktar datetime içe aktarma tarihinden itibaren, datetime baskı (sayfa1.cell (1,2) .ctype) date_value = xlrd.xldate_as_tuple (sayfa1.cell_value (1,2), wb.datemode) baskı (tarih_değer) print (tarih (* tarih_değer)) baskı (tarih (* tarih_değer) .strftime ('% Y /% m /% d'))Sonuçlar aşağıdaki gibidir:
2. Birleştirilmiş hücrenin içeriğini alın
İşlemden önce, merged_cells () kullanımını tanıtmama izin verin. Merged_cells tarafından döndürülen dört parametrenin anlamı: (satır, satır_aralığı, sütun, sütun_aralığı), burada