Excellden veri okuyup farklı bir excele yazdırma

Merhaba Arkadaşlar ;
bir exceldeki veriyi okuyup farklı bir excel dosyasına yazdırmam gerek fakat işin içinden çıkamadım.
örnek vermek gerekirse =
aa.xlsx dosyasındaki A6 hücresindeki veriyi
bb.xlsx dosyasındaki A11 hücresine yazdıracağım
fakat satır numaraları sürekli değişmekte.
Bu konuda yardım edebilirseniz memnun olurum.
Şimdiden Teşekkürler…

Merhaba, şu şekilde yapabilirsin;
aa.xlsx verisini txt dosyasına çek, daha sonra bb.xlsx dosyasına txtden yazdır.
Bir veri çekme programında benimde direkt excele yazdırmam gereken bilgiler vardı, bu şekilde çözmüştüm.

Olabilir ama hücre numaraları değişecek mesela a6 hücresindeki k2580’e gelecek

Bu şekilde kaç tane değişim olacak?

Python’da Exel dosyaları ile çalışmak için pek çok kütüphane var. Mesela:

  • openpyxl
  • XlsxWriter
  • xlwings

Hergün 10 satır ile 50 satır arasında veri geliyor hergün defalarca uğramaktansa tek tıklama ile yapılabilirmi diye düşündüm

openpyxl kullanıyorum ama hücreyi seçtiremedim bilgin varsa yardım edebilirsin :slight_smile:

Daha önce hiç Excel dosyaları ile Python’da çalışmadım. Bu yüzden yardımcı olamayacağım ne yazık ki. Ama kendi dökümantasyonuna bakabilirsiniz.

Eğer sayıları kullanmak isterseniz xleditor kütüphanesini kullanabilirsiniz. Harfler sürekli artıyorsa bunu kullanın. Ama harfler gerekiyorsa şu siteye bakın:

openpyxl dökümanı gayet güzel yazılmış. Kendi dökümanında, bir excel sayfasında veri okuma şöyle anlatılmış:

>>> from openpyxl import load_workbook
>>> wb = load_workbook(filename = 'empty_book.xlsx')
>>> sheet_ranges = wb['range names']         #range  names : çalışma sayfası
>>> print(sheet_ranges['D18'].value)            #çalışma sayfasaında D18 hücresinin değerini .value ile alıyoruz.

Yani senin bir dosyadan okuyum diğer dosyaya yazman için yapman gereken şöyle birşey:

#excel1.xlsx den excel2.xlsx dosyasına veri kaydedecez.
from openpyxl import load_workbook

#kullanacağımız excel dosyalarını tanımlıyoruz.
excel1 = load_workbook(filename = 'excel1.xlsx')
excel2 = load_workbook(filename = 'excel2.xlsx')

#excel dosyalarında hangi sayfadan veri alacaksak o sayfayı tanımlıyoruz.
sayfa1 = excel1['Çalışma Sayfası'] 
sayfa2 = excel2['Çalışma Sayfası']

#seçtiğimiz sayfada lazım kopyalayacağımız hücre verisini değişkene atıyoruz.
hucre=sayfa1['D18'].value

#diğer sayfada istediğimiz hücreye atıyoruz.
sayfa2["A12"] = hucre

#excel bilgin varsa şöyle belli aralıktaki değerleri de alıp kopyalayabilirsin.
sayfa2["A1:C5"] = sayfa1["A1:C5"]

Veri okuyup yazma böyle. Gerisi uygun algoritma ile istenen veriyi alıp işleyip istenen yere yazma. Onda da takılırsan elimden gelirse yardımcı olurum.

2 Beğeni

Teşekkürler verdiğin yol üzerinden gidince %90 oranında çözüldü

from openpyxl import load_workbook

excel1=load_workbook(filename='bb.xlsx')
excel2=load_workbook(filename='aa.xlsx')
sayfa1=excel1['Page1']
sayfa2=excel2['Sayfa1']
hucreNo=5
hucreNo1=2886
hucreSay=1
while True:
    hucreSay+=1
    if hucreSay==31:
        sayfa2["H2887"]=hucreNo1
        hucreNo1=hucreNo1
        print"Girisler Yapildi"
        break
    else:
        hucreNo=hucreNo+1
        hucreNo1=hucreNo1+1
        TakipNo=sayfa1['A{}'.format(hucreNo)].value
        isim=sayfa1['J{}'.format(hucreNo)].value
        Adres=sayfa1['K{}'.format(hucreNo)].value
        Tel=sayfa1['AC{}'.format(hucreNo)].value
        Tarih=sayfa1['E{}'.format(hucreNo)].value
        Tutar=sayfa1['AM{}'.format(hucreNo)].value
        if TakipNo==None:
            break
        else:
            sayfa2['K{}'.format(hucreNo1)]=TakipNo
            sayfa2['M{}'.format(hucreNo1)]=isim
            sayfa2['C{}'.format(hucreNo1)]=Adres
            sayfa2['D{}'.format(hucreNo1)]=Tel
            sayfa2['A{}'.format(hucreNo1)]=Tarih
            sayfa2['E{}'.format(hucreNo1)]=Tutar
excel1.save('bb.xlsx')
excel2.save('aa.xlsx')
excel1.close()
excel2.close()

Tek sıkıntım programı yeniden başlatınca son hücre sayısından devam etmiyor… :frowning:

Şimdilik bir .txt dosyasına yazın. İlerlediğinizde config modülünü kullanarak düzenlersiniz.

Onu da şöyle halledebilirsin:

#boş satırı bulma!
hucreSay = 1
while True:
    if sayfa2['A{}'.format(i)].value:
        hucreSay+=1

# yani hücre sayısını sırayla arttıracak. Eğer hücre boş ise zaten aradığını bulmuş olacaksın.

İşin içinden çıkamadım bi el atabilirseniz

# -*- coding: UTF-8 -*-
from openpyxl import load_workbook ,Workbook

excel1=load_workbook(filename="bb.xlsx")#okunacak dosya
excel2=load_workbook(filename="aa.xlsx")#yazılacak dosya
sayfa1=excel1['Page 1']
sayfa2=excel2.active# aktif sayfayı ["Sayfa1"] olarak eklediğin zaman excell formülünde sorun çıkartıyor
hucreNo=5#okunacak dosyanın artan satır nosu
hucreNo1=1#yazılacak dosyanın artan satır nosu
veri=0
"""for cell in sayfa2["F"]:#ilk boş hucreyi bulma döngüsü
    if cell== "Yolda":
        print cell.row
        hucreNo1 = hucreNo1 + cell.row
        print "if içi hucreNo1" , hucreNo1
        break
    else:
        cell.row + 1
"""
print "for çıkışı hucre no " , hucreNo1#for çıkış kontrolü
while True:
   TakipNo1 = sayfa1['A{}'.format(hucreNo)].value#okunacak dosya boş hucreye geldiği zaman döngüyü kırma
   if TakipNo1==None:
       print"Giris Sınıra ulaşıldı"
       break
   else:
       hucreNo = hucreNo + 1
       TakipNo = sayfa1['A{}'.format(hucreNo)].value#link değişkenine kadar okunacak dosyadaki hücreleri değişkene atama
       isim=sayfa1['J{}'.format(hucreNo)].value
       Adres=sayfa1['K{}'.format(hucreNo)].value
       Tel=sayfa1['AC{}'.format(hucreNo)].value
       Tarih=sayfa1['E{}'.format(hucreNo)].value
       Tutar=sayfa1['AM{}'.format(hucreNo)].value
       durum="Yolda"
       bos=""
       link="http://selfservis.yurticikargo.com/reports/SSWDocumentDetail.aspx?DocId="
       kopru1 = sayfa2["b{}".format(hucreNo1)] = "=HYPERLINK(k{},L{})".format(hucreNo1, hucreNo1)#excelldeki köprü fonksyonu
       birles1 = sayfa2["K{}".format(hucreNo1)] = "=CONCATENATE(I{},J{})".format(hucreNo1, hucreNo1)#excelldeki hücre birleştirme onksyonu
       hucreNo1 = hucreNo1 + 1
       satir=[Tarih,kopru1,Adres,Tel,Tutar,durum,bos,bos,link,TakipNo,birles1,isim]#yazılacak dosyaya eklenecek satırlar
       sayfa2.append(satir)
       print hucreNo1#satır no artıyormu diye kontrol
       veri= veri+1
       satir=list()#eklenecek listeyi temizleme
       print "Ekleme sonu Hucre no :",hucreNo1#kontrol
       if TakipNo==None:
           #sayfa2.delete_rows(hucreNo1,amount=1)#eklemelerde son satırda fazladan ekleme yapıyordu son satırı silmek için
           break
excel1.save('bb.xlsx')
excel2.save('aa.xlsx')
excel1.close()
excel2.close() 

okumak istediğim excel burda : https://drive.google.com/open?id=1s7TUk0_6NbTu6Jv7PtT42GSDV7AN332X

iki 3 kere çalıştırırsanız hataları görürsünüz
ilk satıra boş ekleme yapıyor
ikinci çalıştırılmasında kayma yapıyor
köprüdeki ve birleştirdeki formuller hucre sayısına göre artmıyor
yardım edebilirseniz memnun olurum

Merhabaç Linuxda yapmaya çalıştım modül ile ilgili bir hata verdi. Vakit bulduğumda windows da deneyecem. bb.xlsx dosyasına baktım. Yapmak istediğin tam olarak nedir? Yazılı olarak ifade edebilir misin? Kodların biraz karışık geldi ve açıklama eklememişsin hiç. Tarif edersen yapmaya çalışayım ben.

kod içerisine açıklamaları ekledim
elimde müşteri takip listesi var “bb” dosyası hergün mail olarak bana ulaşmakta içeriği 50 satıra kadar çıkıyor
her sabah tek tek hucreleri kopyala yapıştır yapmamak için böyle bir şey düşünmütşüm

kopru1 ve birles1 de ne yapmak istediğini anlamadığım için onları yorum satırı haline getirdim.
Bu kod senin işine yarar ama girilen takip no excel dosyasında varsa kaydetmesin şeklinde bir kontorol yaptırtırsan çok daha güzel olur. Kazara aynı kayt iki defa olmaz. Aslında sqlite ile veritabanına kaydedip sonra istediğin filtreye (isim, tarih, telefon no vb.) göre çekip excel dosyasına yazdırsan daha rahat olur bence.

from openpyxl import load_workbook

#çalışma dosyalarını aktarıyoruz.
# Bu kodun hata vermemesi için 'aa.xlsx' dosyası dizinde olmalıdır.
excel_oku = load_workbook(filename= "bb.xlsx")
excel_yaz = load_workbook(filename= "aa.xlsx")

# Geçerli çalışma sayfalarını seçiyoruz.
# sheetnames: dosya içindeki çalışma sayfaların liste olarak verir.
# Biz burda elle yazmadan direk ilk sıradaki çalışma sayfalarını seçmiş olacaz.
sayfa_oku = excel_oku[excel_oku.sheetnames[0]]
sayfa_yaz = excel_yaz[excel_yaz.sheetnames[0]]

# Alacağımız verinin satır sayısını belirtiyoruz.
# Bu değer heralde her seferinde 6. satırdan başlayacak.
hucreNo_oku = 6

# Yazacağımız dosyanın boş satırının satır numarasını buluyoruz.
# while döngüsünden sonra hucreNo_yaz değeri boş satır numarasına eşit olacak.
# eğer bu sayfada binlerce kayıt olacaksa boş satırı daha kısa sürede bulmak için
# başka bir yöntem de bulunabilir.
# İlk satıra açıklama gelir diye de 2. satırdan itibaren yazmaya başladım.
hucreNo_yaz = 2

while sayfa_yaz["A"+str(hucreNo_yaz)].value != None: #hücre boş olmadığı sürece diğer satıra geç!
    hucreNo_yaz+=1

# Şimdi 'bb.xlsx' dosyasndan 'aa.xlsx' dosyasına veri aktaracağız.
# Kodlar daha sade gözüksün diye şu iki fonksiyonu tanımlayalım

#harf ve rakamını belirtiğimiz hücrenin direk değerini döndürür.
def oku(harf,rakam):
    return sayfa_oku[harf+str(rakam)].value

#harf ve rakamını belirtiğimiz hücreye, belirtiğimiz değeri atar
def yaz(harf,rakam,deger):
    sayfa_yaz[harf+str(rakam)] = deger


# 'bb.xlsx' dosyasında boş satıra denk gelene dek veri alıp aktaracağız.
while oku("A",hucreNo_oku) == None: #yani seçilen hücre boş olana kadar aşağıdaki işlemleri yap!
    yaz("A",hucreNo_yaz, deger = oku("A",hucreNo_oku))  #TakipNo
    yaz("B",hucreNo_yaz, deger = oku("J",hucreNo_oku))  #isim
    yaz("C",hucreNo_yaz, deger = oku("K",hucreNo_oku))  #adres
    yaz("D",hucreNo_yaz, deger = oku("AC",hucreNo_oku)) #tel
    yaz("E",hucreNo_yaz, deger = oku("E",hucreNo_oku))  #tarih
    yaz("F",hucreNo_yaz, deger = oku("AM",hucreNo_oku)) #tutar
    yaz("G",hucreNo_yaz, deger = "Yolda")               #durum
    yaz("H",hucreNo_yaz, deger = "")                    #bos
    yaz("I",hucreNo_yaz, deger = "http://selfservis.yurticikargo.com/reports/SSWDocumentDetail.aspx?DocId=") #link
    # yaz("J",hucreNo_yaz, deger = "=HYPERLINK(K{},L{})".format(hucreNo_oku, hucreNo_oku))                   #kopru
    # yaz("K",hucreNo_yaz, deger = "=CONCATENATE(I{},J{})".format(hucreNo_oku, hucreNo_oku))                 #birles

    hucreNo_oku+=1 #okunan sayfada bir sonraki satıra geç!
    hucreNo_yaz+=1 #yazılan sayfada bir sonraki satıra geç!

# okunacak başka satır kalmadıktan sonra:
excel_yaz.save("aa.xlsx")
excel_yaz.close()
print("Yazma işlemi tamamlandı!")